@ind-ds/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/cjs/ind-alarm.cjs.entry.js +35 -0
- package/dist/cjs/ind-alarm.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-app-header.cjs.entry.js +42 -0
- package/dist/cjs/ind-app-header.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-button.cjs.entry.js +79 -0
- package/dist/cjs/ind-button.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-checkbox.cjs.entry.js +49 -0
- package/dist/cjs/ind-checkbox.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-dialog.cjs.entry.js +101 -0
- package/dist/cjs/ind-dialog.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-divider.cjs.entry.js +21 -0
- package/dist/cjs/ind-divider.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-ds.cjs.js +27 -0
- package/dist/cjs/ind-ds.cjs.js.map +1 -0
- package/dist/cjs/ind-fill-row.cjs.entry.js +34 -0
- package/dist/cjs/ind-fill-row.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-health-card.cjs.entry.js +38 -0
- package/dist/cjs/ind-health-card.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-input.cjs.entry.js +57 -0
- package/dist/cjs/ind-input.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-led.cjs.entry.js +29 -0
- package/dist/cjs/ind-led.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-mqtt-monitor.cjs.entry.js +75 -0
- package/dist/cjs/ind-mqtt-monitor.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-nav-item.cjs.entry.js +48 -0
- package/dist/cjs/ind-nav-item.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-progress.cjs.entry.js +48 -0
- package/dist/cjs/ind-progress.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-scara-canvas.cjs.entry.js +57 -0
- package/dist/cjs/ind-scara-canvas.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-select.cjs.entry.js +55 -0
- package/dist/cjs/ind-select.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-shelf-canvas.cjs.entry.js +88 -0
- package/dist/cjs/ind-shelf-canvas.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-sidebar-nav.cjs.entry.js +20 -0
- package/dist/cjs/ind-sidebar-nav.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-status-bar.cjs.entry.js +22 -0
- package/dist/cjs/ind-status-bar.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-status-dot.cjs.entry.js +31 -0
- package/dist/cjs/ind-status-dot.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-textarea.cjs.entry.js +66 -0
- package/dist/cjs/ind-textarea.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-toolbar-action.cjs.entry.js +23 -0
- package/dist/cjs/ind-toolbar-action.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-value.cjs.entry.js +47 -0
- package/dist/cjs/ind-value.cjs.entry.js.map +1 -0
- package/dist/cjs/ind-valve.cjs.entry.js +31 -0
- package/dist/cjs/ind-valve.cjs.entry.js.map +1 -0
- package/dist/cjs/index-ph7ZTjuY.js +1638 -0
- package/dist/cjs/index-ph7ZTjuY.js.map +1 -0
- package/dist/cjs/index.cjs.js +5 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +15 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/collection/collection-manifest.json +35 -0
- package/dist/collection/components/atoms/alarm/alarm.css +87 -0
- package/dist/collection/components/atoms/alarm/alarm.js +122 -0
- package/dist/collection/components/atoms/alarm/alarm.js.map +1 -0
- package/dist/collection/components/atoms/button/button.css +110 -0
- package/dist/collection/components/atoms/button/button.js +215 -0
- package/dist/collection/components/atoms/button/button.js.map +1 -0
- package/dist/collection/components/atoms/checkbox/checkbox.css +92 -0
- package/dist/collection/components/atoms/checkbox/checkbox.js +214 -0
- package/dist/collection/components/atoms/checkbox/checkbox.js.map +1 -0
- package/dist/collection/components/atoms/dialog/dialog.css +85 -0
- package/dist/collection/components/atoms/dialog/dialog.js +265 -0
- package/dist/collection/components/atoms/dialog/dialog.js.map +1 -0
- package/dist/collection/components/atoms/divider/divider.css +16 -0
- package/dist/collection/components/atoms/divider/divider.js +50 -0
- package/dist/collection/components/atoms/divider/divider.js.map +1 -0
- package/dist/collection/components/atoms/input/input.css +92 -0
- package/dist/collection/components/atoms/input/input.js +427 -0
- package/dist/collection/components/atoms/input/input.js.map +1 -0
- package/dist/collection/components/atoms/led/led.css +91 -0
- package/dist/collection/components/atoms/led/led.js +123 -0
- package/dist/collection/components/atoms/led/led.js.map +1 -0
- package/dist/collection/components/atoms/progress/progress.css +69 -0
- package/dist/collection/components/atoms/progress/progress.js +221 -0
- package/dist/collection/components/atoms/progress/progress.js.map +1 -0
- package/dist/collection/components/atoms/scara-canvas/scara-canvas.css +100 -0
- package/dist/collection/components/atoms/scara-canvas/scara-canvas.js +138 -0
- package/dist/collection/components/atoms/scara-canvas/scara-canvas.js.map +1 -0
- package/dist/collection/components/atoms/select/select.css +88 -0
- package/dist/collection/components/atoms/select/select.js +244 -0
- package/dist/collection/components/atoms/select/select.js.map +1 -0
- package/dist/collection/components/atoms/shelf-canvas/shelf-canvas.css +67 -0
- package/dist/collection/components/atoms/shelf-canvas/shelf-canvas.js +184 -0
- package/dist/collection/components/atoms/shelf-canvas/shelf-canvas.js.map +1 -0
- package/dist/collection/components/atoms/status-dot/status-dot.css +69 -0
- package/dist/collection/components/atoms/status-dot/status-dot.js +125 -0
- package/dist/collection/components/atoms/status-dot/status-dot.js.map +1 -0
- package/dist/collection/components/atoms/textarea/textarea.css +74 -0
- package/dist/collection/components/atoms/textarea/textarea.js +331 -0
- package/dist/collection/components/atoms/textarea/textarea.js.map +1 -0
- package/dist/collection/components/atoms/value/value.css +115 -0
- package/dist/collection/components/atoms/value/value.js +223 -0
- package/dist/collection/components/atoms/value/value.js.map +1 -0
- package/dist/collection/components/atoms/valve/valve.css +101 -0
- package/dist/collection/components/atoms/valve/valve.js +150 -0
- package/dist/collection/components/atoms/valve/valve.js.map +1 -0
- package/dist/collection/components/molecules/fill-row/fill-row.css +70 -0
- package/dist/collection/components/molecules/fill-row/fill-row.js +181 -0
- package/dist/collection/components/molecules/fill-row/fill-row.js.map +1 -0
- package/dist/collection/components/molecules/health-card/health-card.css +53 -0
- package/dist/collection/components/molecules/health-card/health-card.js +124 -0
- package/dist/collection/components/molecules/health-card/health-card.js.map +1 -0
- package/dist/collection/components/molecules/nav-item/nav-item.css +82 -0
- package/dist/collection/components/molecules/nav-item/nav-item.js +165 -0
- package/dist/collection/components/molecules/nav-item/nav-item.js.map +1 -0
- package/dist/collection/components/molecules/toolbar-action/toolbar-action.css +36 -0
- package/dist/collection/components/molecules/toolbar-action/toolbar-action.js +45 -0
- package/dist/collection/components/molecules/toolbar-action/toolbar-action.js.map +1 -0
- package/dist/collection/components/organisms/app-header/app-header.css +127 -0
- package/dist/collection/components/organisms/app-header/app-header.js +256 -0
- package/dist/collection/components/organisms/app-header/app-header.js.map +1 -0
- package/dist/collection/components/organisms/mqtt-monitor/mqtt-monitor.css +96 -0
- package/dist/collection/components/organisms/mqtt-monitor/mqtt-monitor.js +205 -0
- package/dist/collection/components/organisms/mqtt-monitor/mqtt-monitor.js.map +1 -0
- package/dist/collection/components/organisms/sidebar-nav/sidebar-nav.css +39 -0
- package/dist/collection/components/organisms/sidebar-nav/sidebar-nav.js +26 -0
- package/dist/collection/components/organisms/sidebar-nav/sidebar-nav.js.map +1 -0
- package/dist/collection/components/organisms/status-bar/status-bar.css +34 -0
- package/dist/collection/components/organisms/status-bar/status-bar.js +76 -0
- package/dist/collection/components/organisms/status-bar/status-bar.js.map +1 -0
- package/dist/collection/index.js +2 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/components/ind-alarm.d.ts +11 -0
- package/dist/components/ind-alarm.js +2 -0
- package/dist/components/ind-alarm.js.map +1 -0
- package/dist/components/ind-app-header.d.ts +11 -0
- package/dist/components/ind-app-header.js +2 -0
- package/dist/components/ind-app-header.js.map +1 -0
- package/dist/components/ind-button.d.ts +11 -0
- package/dist/components/ind-button.js +2 -0
- package/dist/components/ind-button.js.map +1 -0
- package/dist/components/ind-checkbox.d.ts +11 -0
- package/dist/components/ind-checkbox.js +2 -0
- package/dist/components/ind-checkbox.js.map +1 -0
- package/dist/components/ind-dialog.d.ts +11 -0
- package/dist/components/ind-dialog.js +2 -0
- package/dist/components/ind-dialog.js.map +1 -0
- package/dist/components/ind-divider.d.ts +11 -0
- package/dist/components/ind-divider.js +2 -0
- package/dist/components/ind-divider.js.map +1 -0
- package/dist/components/ind-fill-row.d.ts +11 -0
- package/dist/components/ind-fill-row.js +2 -0
- package/dist/components/ind-fill-row.js.map +1 -0
- package/dist/components/ind-health-card.d.ts +11 -0
- package/dist/components/ind-health-card.js +2 -0
- package/dist/components/ind-health-card.js.map +1 -0
- package/dist/components/ind-input.d.ts +11 -0
- package/dist/components/ind-input.js +2 -0
- package/dist/components/ind-input.js.map +1 -0
- package/dist/components/ind-led.d.ts +11 -0
- package/dist/components/ind-led.js +2 -0
- package/dist/components/ind-led.js.map +1 -0
- package/dist/components/ind-mqtt-monitor.d.ts +11 -0
- package/dist/components/ind-mqtt-monitor.js +2 -0
- package/dist/components/ind-mqtt-monitor.js.map +1 -0
- package/dist/components/ind-nav-item.d.ts +11 -0
- package/dist/components/ind-nav-item.js +2 -0
- package/dist/components/ind-nav-item.js.map +1 -0
- package/dist/components/ind-progress.d.ts +11 -0
- package/dist/components/ind-progress.js +2 -0
- package/dist/components/ind-progress.js.map +1 -0
- package/dist/components/ind-scara-canvas.d.ts +11 -0
- package/dist/components/ind-scara-canvas.js +2 -0
- package/dist/components/ind-scara-canvas.js.map +1 -0
- package/dist/components/ind-select.d.ts +11 -0
- package/dist/components/ind-select.js +2 -0
- package/dist/components/ind-select.js.map +1 -0
- package/dist/components/ind-shelf-canvas.d.ts +11 -0
- package/dist/components/ind-shelf-canvas.js +2 -0
- package/dist/components/ind-shelf-canvas.js.map +1 -0
- package/dist/components/ind-sidebar-nav.d.ts +11 -0
- package/dist/components/ind-sidebar-nav.js +2 -0
- package/dist/components/ind-sidebar-nav.js.map +1 -0
- package/dist/components/ind-status-bar.d.ts +11 -0
- package/dist/components/ind-status-bar.js +2 -0
- package/dist/components/ind-status-bar.js.map +1 -0
- package/dist/components/ind-status-dot.d.ts +11 -0
- package/dist/components/ind-status-dot.js +2 -0
- package/dist/components/ind-status-dot.js.map +1 -0
- package/dist/components/ind-textarea.d.ts +11 -0
- package/dist/components/ind-textarea.js +2 -0
- package/dist/components/ind-textarea.js.map +1 -0
- package/dist/components/ind-toolbar-action.d.ts +11 -0
- package/dist/components/ind-toolbar-action.js +2 -0
- package/dist/components/ind-toolbar-action.js.map +1 -0
- package/dist/components/ind-value.d.ts +11 -0
- package/dist/components/ind-value.js +2 -0
- package/dist/components/ind-value.js.map +1 -0
- package/dist/components/ind-valve.d.ts +11 -0
- package/dist/components/ind-valve.js +2 -0
- package/dist/components/ind-valve.js.map +1 -0
- package/dist/components/index.d.ts +35 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/p-D-FsSjAC.js +2 -0
- package/dist/components/p-D-FsSjAC.js.map +1 -0
- package/dist/components/p-acsAzrRn.js +2 -0
- package/dist/components/p-acsAzrRn.js.map +1 -0
- package/dist/docs.d.ts +480 -0
- package/dist/docs.json +5360 -0
- package/dist/esm/ind-alarm.entry.js +33 -0
- package/dist/esm/ind-alarm.entry.js.map +1 -0
- package/dist/esm/ind-app-header.entry.js +40 -0
- package/dist/esm/ind-app-header.entry.js.map +1 -0
- package/dist/esm/ind-button.entry.js +77 -0
- package/dist/esm/ind-button.entry.js.map +1 -0
- package/dist/esm/ind-checkbox.entry.js +47 -0
- package/dist/esm/ind-checkbox.entry.js.map +1 -0
- package/dist/esm/ind-dialog.entry.js +99 -0
- package/dist/esm/ind-dialog.entry.js.map +1 -0
- package/dist/esm/ind-divider.entry.js +19 -0
- package/dist/esm/ind-divider.entry.js.map +1 -0
- package/dist/esm/ind-ds.js +23 -0
- package/dist/esm/ind-ds.js.map +1 -0
- package/dist/esm/ind-fill-row.entry.js +32 -0
- package/dist/esm/ind-fill-row.entry.js.map +1 -0
- package/dist/esm/ind-health-card.entry.js +36 -0
- package/dist/esm/ind-health-card.entry.js.map +1 -0
- package/dist/esm/ind-input.entry.js +55 -0
- package/dist/esm/ind-input.entry.js.map +1 -0
- package/dist/esm/ind-led.entry.js +27 -0
- package/dist/esm/ind-led.entry.js.map +1 -0
- package/dist/esm/ind-mqtt-monitor.entry.js +73 -0
- package/dist/esm/ind-mqtt-monitor.entry.js.map +1 -0
- package/dist/esm/ind-nav-item.entry.js +46 -0
- package/dist/esm/ind-nav-item.entry.js.map +1 -0
- package/dist/esm/ind-progress.entry.js +46 -0
- package/dist/esm/ind-progress.entry.js.map +1 -0
- package/dist/esm/ind-scara-canvas.entry.js +55 -0
- package/dist/esm/ind-scara-canvas.entry.js.map +1 -0
- package/dist/esm/ind-select.entry.js +53 -0
- package/dist/esm/ind-select.entry.js.map +1 -0
- package/dist/esm/ind-shelf-canvas.entry.js +86 -0
- package/dist/esm/ind-shelf-canvas.entry.js.map +1 -0
- package/dist/esm/ind-sidebar-nav.entry.js +18 -0
- package/dist/esm/ind-sidebar-nav.entry.js.map +1 -0
- package/dist/esm/ind-status-bar.entry.js +20 -0
- package/dist/esm/ind-status-bar.entry.js.map +1 -0
- package/dist/esm/ind-status-dot.entry.js +29 -0
- package/dist/esm/ind-status-dot.entry.js.map +1 -0
- package/dist/esm/ind-textarea.entry.js +64 -0
- package/dist/esm/ind-textarea.entry.js.map +1 -0
- package/dist/esm/ind-toolbar-action.entry.js +21 -0
- package/dist/esm/ind-toolbar-action.entry.js.map +1 -0
- package/dist/esm/ind-value.entry.js +45 -0
- package/dist/esm/ind-value.entry.js.map +1 -0
- package/dist/esm/ind-valve.entry.js +29 -0
- package/dist/esm/ind-valve.entry.js.map +1 -0
- package/dist/esm/index-D2yNiL0d.js +1628 -0
- package/dist/esm/index-D2yNiL0d.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +13 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/ind-ds/ind-ds.css +1 -0
- package/dist/ind-ds/ind-ds.esm.js +2 -0
- package/dist/ind-ds/ind-ds.esm.js.map +1 -0
- package/dist/ind-ds/index.esm.js +2 -0
- package/dist/ind-ds/index.esm.js.map +1 -0
- package/dist/ind-ds/p-0840007d.entry.js +2 -0
- package/dist/ind-ds/p-0840007d.entry.js.map +1 -0
- package/dist/ind-ds/p-1727b403.entry.js +2 -0
- package/dist/ind-ds/p-1727b403.entry.js.map +1 -0
- package/dist/ind-ds/p-1d871f3f.entry.js +2 -0
- package/dist/ind-ds/p-1d871f3f.entry.js.map +1 -0
- package/dist/ind-ds/p-296b0c55.entry.js +2 -0
- package/dist/ind-ds/p-296b0c55.entry.js.map +1 -0
- package/dist/ind-ds/p-459405b6.entry.js +2 -0
- package/dist/ind-ds/p-459405b6.entry.js.map +1 -0
- package/dist/ind-ds/p-4a4811ab.entry.js +2 -0
- package/dist/ind-ds/p-4a4811ab.entry.js.map +1 -0
- package/dist/ind-ds/p-52b18003.entry.js +2 -0
- package/dist/ind-ds/p-52b18003.entry.js.map +1 -0
- package/dist/ind-ds/p-5369d63a.entry.js +2 -0
- package/dist/ind-ds/p-5369d63a.entry.js.map +1 -0
- package/dist/ind-ds/p-595ccdce.entry.js +2 -0
- package/dist/ind-ds/p-595ccdce.entry.js.map +1 -0
- package/dist/ind-ds/p-6c5c8053.entry.js +2 -0
- package/dist/ind-ds/p-6c5c8053.entry.js.map +1 -0
- package/dist/ind-ds/p-6c8f4bbd.entry.js +2 -0
- package/dist/ind-ds/p-6c8f4bbd.entry.js.map +1 -0
- package/dist/ind-ds/p-781e21df.entry.js +2 -0
- package/dist/ind-ds/p-781e21df.entry.js.map +1 -0
- package/dist/ind-ds/p-8817625a.entry.js +2 -0
- package/dist/ind-ds/p-8817625a.entry.js.map +1 -0
- package/dist/ind-ds/p-99f55d2a.entry.js +2 -0
- package/dist/ind-ds/p-99f55d2a.entry.js.map +1 -0
- package/dist/ind-ds/p-9b93fb09.entry.js +2 -0
- package/dist/ind-ds/p-9b93fb09.entry.js.map +1 -0
- package/dist/ind-ds/p-D2yNiL0d.js +3 -0
- package/dist/ind-ds/p-D2yNiL0d.js.map +1 -0
- package/dist/ind-ds/p-c8de42e9.entry.js +2 -0
- package/dist/ind-ds/p-c8de42e9.entry.js.map +1 -0
- package/dist/ind-ds/p-c9f752e6.entry.js +2 -0
- package/dist/ind-ds/p-c9f752e6.entry.js.map +1 -0
- package/dist/ind-ds/p-cee8bf2b.entry.js +2 -0
- package/dist/ind-ds/p-cee8bf2b.entry.js.map +1 -0
- package/dist/ind-ds/p-cf07b580.entry.js +2 -0
- package/dist/ind-ds/p-cf07b580.entry.js.map +1 -0
- package/dist/ind-ds/p-d1edc052.entry.js +2 -0
- package/dist/ind-ds/p-d1edc052.entry.js.map +1 -0
- package/dist/ind-ds/p-ea24a59d.entry.js +2 -0
- package/dist/ind-ds/p-ea24a59d.entry.js.map +1 -0
- package/dist/ind-ds/p-ec0b3785.entry.js +2 -0
- package/dist/ind-ds/p-ec0b3785.entry.js.map +1 -0
- package/dist/ind-ds/p-ee453874.entry.js +2 -0
- package/dist/ind-ds/p-ee453874.entry.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/types/components/atoms/alarm/alarm.d.ts +13 -0
- package/dist/types/components/atoms/button/button.d.ts +31 -0
- package/dist/types/components/atoms/checkbox/checkbox.d.ts +18 -0
- package/dist/types/components/atoms/dialog/dialog.d.ts +29 -0
- package/dist/types/components/atoms/divider/divider.d.ts +6 -0
- package/dist/types/components/atoms/input/input.d.ts +34 -0
- package/dist/types/components/atoms/led/led.d.ts +14 -0
- package/dist/types/components/atoms/progress/progress.d.ts +24 -0
- package/dist/types/components/atoms/scara-canvas/scara-canvas.d.ts +21 -0
- package/dist/types/components/atoms/select/select.d.ts +27 -0
- package/dist/types/components/atoms/shelf-canvas/shelf-canvas.d.ts +29 -0
- package/dist/types/components/atoms/status-dot/status-dot.d.ts +14 -0
- package/dist/types/components/atoms/textarea/textarea.d.ts +28 -0
- package/dist/types/components/atoms/value/value.d.ts +24 -0
- package/dist/types/components/atoms/valve/valve.d.ts +17 -0
- package/dist/types/components/molecules/fill-row/fill-row.d.ts +19 -0
- package/dist/types/components/molecules/health-card/health-card.d.ts +13 -0
- package/dist/types/components/molecules/nav-item/nav-item.d.ts +17 -0
- package/dist/types/components/molecules/toolbar-action/toolbar-action.d.ts +6 -0
- package/dist/types/components/organisms/app-header/app-header.d.ts +26 -0
- package/dist/types/components/organisms/mqtt-monitor/mqtt-monitor.d.ts +23 -0
- package/dist/types/components/organisms/sidebar-nav/sidebar-nav.d.ts +11 -0
- package/dist/types/components/organisms/status-bar/status-bar.d.ts +13 -0
- package/dist/types/components.d.ts +1775 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/stencil-public-runtime.d.ts +1861 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +87 -0
- package/utilities.css +324 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const shelfCanvasCss = () => `:host{display:block;width:var(--ind-size-canvas-shelves-width, 480px);height:var(--ind-size-canvas-shelves-height, 340px);font-family:var(--ind-font-family-sans);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}svg{display:block;width:100%;height:100%;background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default);border-radius:var(--ind-radius-md, 3px)}.heading{font-family:var(--ind-font-family-sans);font-size:13px;font-weight:700;fill:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));text-transform:uppercase;letter-spacing:0.05em}.outline{fill:color-mix(in srgb, var(--ind-surface-raised) 40%, transparent);stroke:var(--ind-surface-border-strong);stroke-width:1.5;stroke-linejoin:round}.fill{fill:var(--ind-state-running-bg, #16a34a);transition:y 240ms, height 240ms}.slot--partial .fill{fill:var(--ind-feedback-warning-bg, #f59e0b)}.slot--empty .fill{fill:var(--ind-feedback-error-bg, #dc2626)}.slot--missing .outline{fill:transparent;stroke-dasharray:4 2;stroke:var(--ind-surface-border-subtle)}.label{font-family:var(--ind-font-family-mono);font-size:11px;font-weight:600;fill:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));letter-spacing:0.02em}.level{font-family:var(--ind-font-family-mono);font-size:12px;font-weight:700;fill:#ffffff;paint-order:stroke;stroke:rgba(0, 0, 0, 0.55);stroke-width:3;letter-spacing:0.02em}.slot--missing .level{display:none}`;
|
|
4
|
+
|
|
5
|
+
const IndShelfCanvas = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
slots = [];
|
|
10
|
+
rows = 1;
|
|
11
|
+
cols = 4;
|
|
12
|
+
heading;
|
|
13
|
+
parseSlots() {
|
|
14
|
+
if (Array.isArray(this.slots))
|
|
15
|
+
return this.slots;
|
|
16
|
+
if (typeof this.slots === 'string' && this.slots.trim()) {
|
|
17
|
+
try {
|
|
18
|
+
const p = JSON.parse(this.slots);
|
|
19
|
+
return Array.isArray(p) ? p : [];
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
resolveState(s) {
|
|
28
|
+
if (s.state)
|
|
29
|
+
return s.state;
|
|
30
|
+
if (s.level === undefined)
|
|
31
|
+
return 'missing';
|
|
32
|
+
if (s.level >= 60)
|
|
33
|
+
return 'full';
|
|
34
|
+
if (s.level >= 20)
|
|
35
|
+
return 'partial';
|
|
36
|
+
return 'empty';
|
|
37
|
+
}
|
|
38
|
+
render() {
|
|
39
|
+
const slots = this.parseSlots();
|
|
40
|
+
const W = 480;
|
|
41
|
+
const H = 340;
|
|
42
|
+
const padX = 24;
|
|
43
|
+
const padTop = this.heading ? 40 : 24;
|
|
44
|
+
const padBottom = 28;
|
|
45
|
+
const gridW = W - padX * 2;
|
|
46
|
+
const gridH = H - padTop - padBottom;
|
|
47
|
+
const cellW = gridW / this.cols;
|
|
48
|
+
const cellH = gridH / this.rows;
|
|
49
|
+
return (h(Host, { key: 'e368cf70181cf224e4076b937a1e12a53e95e58f', role: "img", "aria-label": this.heading ?? 'Shelf inventory' }, h("svg", { key: 'e5fa8c4d7bed40cddbd4c6a691aa49a9c29007a5', viewBox: `0 0 ${W} ${H}`, part: "svg" }, this.heading && (h("text", { key: 'ec0c820367a330cc570b2c44c6d63c11fbed7f3b', x: W / 2, y: "22", class: "heading", "text-anchor": "middle" }, this.heading)), slots.slice(0, this.rows * this.cols).map((s) => {
|
|
50
|
+
const i = slots.indexOf(s);
|
|
51
|
+
const col = i % this.cols;
|
|
52
|
+
const row = Math.floor(i / this.cols);
|
|
53
|
+
const cx = padX + col * cellW + cellW / 2;
|
|
54
|
+
const cy = padTop + row * cellH + cellH / 2;
|
|
55
|
+
const w = Math.min(cellW - 30, 80);
|
|
56
|
+
const bodyH = Math.max(40, cellH - 60);
|
|
57
|
+
const x = cx - w / 2;
|
|
58
|
+
const y = cy - bodyH / 2;
|
|
59
|
+
const neckTopX1 = x + w * 0.32;
|
|
60
|
+
const neckTopX2 = x + w * 0.68;
|
|
61
|
+
const shoulderY = y + 14;
|
|
62
|
+
const state = this.resolveState(s);
|
|
63
|
+
const level = s.level ?? 0;
|
|
64
|
+
const innerPad = 5;
|
|
65
|
+
const innerH = bodyH - 20 - innerPad * 2;
|
|
66
|
+
const fillH = Math.max(0, innerH * (level / 100));
|
|
67
|
+
return (h("g", { class: `slot slot--${state}` }, h("path", { class: "outline", d: `
|
|
68
|
+
M ${neckTopX1} ${y}
|
|
69
|
+
L ${neckTopX2} ${y}
|
|
70
|
+
L ${neckTopX2} ${y + 8}
|
|
71
|
+
L ${x + w} ${shoulderY}
|
|
72
|
+
L ${x + w} ${y + bodyH}
|
|
73
|
+
L ${x} ${y + bodyH}
|
|
74
|
+
L ${x} ${shoulderY}
|
|
75
|
+
L ${neckTopX1} ${y + 8}
|
|
76
|
+
Z
|
|
77
|
+
` }), state !== 'missing' && level > 0 && (h("rect", { class: "fill", x: x + innerPad, y: y + bodyH - innerPad - fillH, width: w - innerPad * 2, height: fillH, rx: "2" })), state !== 'missing' && (h("text", { x: cx, y: cy + 4, class: "level", "text-anchor": "middle" }, Math.round(level), "%")), h("text", { x: cx, y: y + bodyH + 16, class: "label", "text-anchor": "middle" }, s.label)));
|
|
78
|
+
}))));
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
IndShelfCanvas.style = shelfCanvasCss();
|
|
82
|
+
|
|
83
|
+
export { IndShelfCanvas as ind_shelf_canvas };
|
|
84
|
+
//# sourceMappingURL=ind-shelf-canvas.entry.js.map
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=ind-shelf-canvas.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-shelf-canvas.entry.js","sources":["src/components/atoms/shelf-canvas/shelf-canvas.css?tag=ind-shelf-canvas&encapsulation=shadow","src/components/atoms/shelf-canvas/shelf-canvas.tsx"],"sourcesContent":[":host {\n display: block;\n width: var(--ind-size-canvas-shelves-width, 480px);\n height: var(--ind-size-canvas-shelves-height, 340px);\n font-family: var(--ind-font-family-sans);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\nsvg {\n display: block;\n width: 100%;\n height: 100%;\n background: var(--ind-surface-sunken, light-dark(#ffffff, #000000));\n border: 1px solid var(--ind-surface-border-default);\n border-radius: var(--ind-radius-md, 3px);\n}\n\n.heading {\n font-family: var(--ind-font-family-sans);\n font-size: 13px;\n font-weight: 700;\n fill: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.outline {\n fill: color-mix(in srgb, var(--ind-surface-raised) 40%, transparent);\n stroke: var(--ind-surface-border-strong);\n stroke-width: 1.5;\n stroke-linejoin: round;\n}\n\n.fill {\n fill: var(--ind-state-running-bg, #16a34a);\n transition: y 240ms, height 240ms;\n}\n\n.slot--partial .fill { fill: var(--ind-feedback-warning-bg, #f59e0b); }\n.slot--empty .fill { fill: var(--ind-feedback-error-bg, #dc2626); }\n\n.slot--missing .outline {\n fill: transparent;\n stroke-dasharray: 4 2;\n stroke: var(--ind-surface-border-subtle);\n}\n\n.label {\n font-family: var(--ind-font-family-mono);\n font-size: 11px;\n font-weight: 600;\n fill: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n letter-spacing: 0.02em;\n}\n\n.level {\n font-family: var(--ind-font-family-mono);\n font-size: 12px;\n font-weight: 700;\n fill: #ffffff;\n paint-order: stroke;\n stroke: rgba(0, 0, 0, 0.55);\n stroke-width: 3;\n letter-spacing: 0.02em;\n}\n\n.slot--missing .level { display: none; }\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ShelfSlotState = 'full' | 'partial' | 'empty' | 'missing';\n\nexport interface ShelfSlot {\n /** Stable identifier for keying / cell click events. */\n id: string;\n /** Short label shown under the container. */\n label: string;\n /** 0–100 fill level. `undefined` ⇒ container considered missing. */\n level?: number;\n /** Explicit state — overrides the level-based default. */\n state?: ShelfSlotState;\n}\n\n/**\n * Grid of bottle/container slots showing their fill level. Generic — represents\n * any rack of resupplyable containers (bottles, cartridges, kegs, etc.).\n *\n * <ind-shelf-canvas\n * .slots=${[{id:'a', label:'A', level:78}, {id:'b', label:'B', level:12}]}\n * cols=\"2\"></ind-shelf-canvas>\n */\n@Component({\n tag: 'ind-shelf-canvas',\n styleUrl: 'shelf-canvas.css',\n shadow: true,\n})\nexport class IndShelfCanvas {\n @Prop() slots: ShelfSlot[] | string = [];\n @Prop() rows: number = 1;\n @Prop() cols: number = 4;\n @Prop() heading?: string;\n\n private parseSlots(): ShelfSlot[] {\n if (Array.isArray(this.slots)) return this.slots;\n if (typeof this.slots === 'string' && this.slots.trim()) {\n try {\n const p = JSON.parse(this.slots);\n return Array.isArray(p) ? p : [];\n } catch {\n return [];\n }\n }\n return [];\n }\n\n private resolveState(s: ShelfSlot): ShelfSlotState {\n if (s.state) return s.state;\n if (s.level === undefined) return 'missing';\n if (s.level >= 60) return 'full';\n if (s.level >= 20) return 'partial';\n return 'empty';\n }\n\n render() {\n const slots = this.parseSlots();\n const W = 480;\n const H = 340;\n const padX = 24;\n const padTop = this.heading ? 40 : 24;\n const padBottom = 28;\n const gridW = W - padX * 2;\n const gridH = H - padTop - padBottom;\n const cellW = gridW / this.cols;\n const cellH = gridH / this.rows;\n\n return (\n <Host role=\"img\" aria-label={this.heading ?? 'Shelf inventory'}>\n <svg viewBox={`0 0 ${W} ${H}`} part=\"svg\">\n {this.heading && (\n <text x={W / 2} y=\"22\" class=\"heading\" text-anchor=\"middle\">\n {this.heading}\n </text>\n )}\n\n {slots.slice(0, this.rows * this.cols).map((s) => {\n const i = slots.indexOf(s);\n const col = i % this.cols;\n const row = Math.floor(i / this.cols);\n const cx = padX + col * cellW + cellW / 2;\n const cy = padTop + row * cellH + cellH / 2;\n\n const w = Math.min(cellW - 30, 80);\n const bodyH = Math.max(40, cellH - 60);\n const x = cx - w / 2;\n const y = cy - bodyH / 2;\n const neckTopX1 = x + w * 0.32;\n const neckTopX2 = x + w * 0.68;\n const shoulderY = y + 14;\n\n const state = this.resolveState(s);\n const level = s.level ?? 0;\n const innerPad = 5;\n const innerH = bodyH - 20 - innerPad * 2;\n const fillH = Math.max(0, innerH * (level / 100));\n\n return (\n <g class={`slot slot--${state}`}>\n {/* container outline — bottle silhouette */}\n <path\n class=\"outline\"\n d={`\n M ${neckTopX1} ${y}\n L ${neckTopX2} ${y}\n L ${neckTopX2} ${y + 8}\n L ${x + w} ${shoulderY}\n L ${x + w} ${y + bodyH}\n L ${x} ${y + bodyH}\n L ${x} ${shoulderY}\n L ${neckTopX1} ${y + 8}\n Z\n `}\n />\n\n {/* fill */}\n {state !== 'missing' && level > 0 && (\n <rect\n class=\"fill\"\n x={x + innerPad}\n y={y + bodyH - innerPad - fillH}\n width={w - innerPad * 2}\n height={fillH}\n rx=\"2\"\n />\n )}\n\n {/* level text inside the body */}\n {state !== 'missing' && (\n <text x={cx} y={cy + 4} class=\"level\" text-anchor=\"middle\">\n {Math.round(level)}%\n </text>\n )}\n\n {/* label under the container */}\n <text x={cx} y={y + bodyH + 16} class=\"label\" text-anchor=\"middle\">\n {s.label}\n </text>\n </g>\n );\n })}\n </svg>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const sidebarNavCss = () => `:host{display:flex;flex-direction:column;width:var(--ind-size-sidebar-width, 178px);height:100%;background:var(--ind-surface-panel);border-right:1px solid var(--ind-surface-border-default);font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));flex-shrink:0;box-sizing:border-box}.brand{padding:var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px)}.brand:has(>:nth-child(1):empty),.brand:not(:has(*)){display:none}.items{flex:1;overflow-y:auto;padding:var(--ind-spacing-2, 4px) 0;scrollbar-width:thin;scrollbar-color:var(--ind-surface-border-strong) transparent}.items::-webkit-scrollbar{width:8px}.items::-webkit-scrollbar-thumb{background:var(--ind-surface-border-strong);border-radius:4px}.items::-webkit-scrollbar-track{background:transparent}.footer{padding:var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);border-top:1px solid var(--ind-surface-border-subtle);font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.footer:not(:has(*)){display:none}`;
|
|
4
|
+
|
|
5
|
+
const IndSidebarNav = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
render() {
|
|
10
|
+
return (h(Host, { key: '3ffd6c6d8afe2ed104b24ad1435d7a1d163c5071', role: "navigation" }, h("div", { key: '2a56d85274fca7043d8e5624a93cb99c8767fc74', class: "brand", part: "brand" }, h("slot", { key: 'd185e1c6570b33648700dd922e671f023b3d34fc', name: "brand" })), h("div", { key: '31aaa48b8e08549a3a4990cbe4ae74507b0a8ccb', class: "items", part: "items" }, h("slot", { key: '4ddb250ed915874ea6114588ab336e662526383f' })), h("div", { key: 'd666ea3f666be22246d6f2e2464a85b741b4bfed', class: "footer", part: "footer" }, h("slot", { key: 'fff6600b601ec97d47f2a79b983d0a7ef261db33', name: "footer" }))));
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
IndSidebarNav.style = sidebarNavCss();
|
|
14
|
+
|
|
15
|
+
export { IndSidebarNav as ind_sidebar_nav };
|
|
16
|
+
//# sourceMappingURL=ind-sidebar-nav.entry.js.map
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=ind-sidebar-nav.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-sidebar-nav.entry.js","sources":["src/components/organisms/sidebar-nav/sidebar-nav.css?tag=ind-sidebar-nav&encapsulation=shadow","src/components/organisms/sidebar-nav/sidebar-nav.tsx"],"sourcesContent":[":host {\n display: flex;\n flex-direction: column;\n width: var(--ind-size-sidebar-width, 178px);\n height: 100%;\n background: var(--ind-surface-panel);\n border-right: 1px solid var(--ind-surface-border-default);\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n flex-shrink: 0;\n box-sizing: border-box;\n}\n\n.brand {\n padding: var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px);\n}\n\n.brand:has(> :nth-child(1):empty),\n.brand:not(:has(*)) { display: none; }\n\n.items {\n flex: 1;\n overflow-y: auto;\n padding: var(--ind-spacing-2, 4px) 0;\n scrollbar-width: thin;\n scrollbar-color: var(--ind-surface-border-strong) transparent;\n}\n.items::-webkit-scrollbar { width: 8px; }\n.items::-webkit-scrollbar-thumb { background: var(--ind-surface-border-strong); border-radius: 4px; }\n.items::-webkit-scrollbar-track { background: transparent; }\n\n.footer {\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);\n border-top: 1px solid var(--ind-surface-border-subtle);\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n.footer:not(:has(*)) { display: none; }\n","import { Component, h, Host } from '@stencil/core';\n\n/**\n * Sidebar shell: a brand area on top, a scrollable nav list, and a footer area.\n *\n * State management is left to the consumer — drive `active` on each <ind-nav-item>\n * from your router. The component is intentionally thin so it works with any\n * routing approach (React Router, Vue Router, hash-based, none).\n */\n@Component({\n tag: 'ind-sidebar-nav',\n styleUrl: 'sidebar-nav.css',\n shadow: true,\n})\nexport class IndSidebarNav {\n render() {\n return (\n <Host role=\"navigation\">\n <div class=\"brand\" part=\"brand\">\n <slot name=\"brand\" />\n </div>\n <div class=\"items\" part=\"items\">\n <slot />\n </div>\n <div class=\"footer\" part=\"footer\">\n <slot name=\"footer\" />\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,aAAa,GAAG,MAAM,CAAC,uiCAAuiC,CAAC;;MCcxjC,aAAa,GAAA,MAAA;;;;IACxB,MAAM,GAAA;QACJ,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,IAAI,EAAC,YAAY,EAAA,EACrB,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,EAC7B,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,OAAO,EAAA,CAAG,CACjB,EACN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,EAC7B,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACJ,EACN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAA,EAC/B,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,QAAQ,GAAG,CAClB,CACD;;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const statusBarCss = () => `:host{display:flex;align-items:center;gap:var(--ind-spacing-3, 6px);padding:var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);background:var(--ind-surface-panel);border-top:1px solid var(--ind-surface-border-default);font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));min-height:24px;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.message{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.spacer{flex:1}.end{display:inline-flex;align-items:center;gap:var(--ind-spacing-3, 6px)}::slotted(*){font-size:var(--ind-font-size-sm, 11px)}`;
|
|
4
|
+
|
|
5
|
+
const IndStatusBar = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
state = 'neutral';
|
|
10
|
+
message;
|
|
11
|
+
render() {
|
|
12
|
+
return (h(Host, { key: 'ea26634fed8ac15e259de910eb7bcd4e5ce3d094', role: "status", "aria-live": "polite" }, h("ind-status-dot", { key: 'a9305e75e5b0e35c5cccf526020ed00177d729e4', state: this.state, size: "sm" }), this.message && h("span", { key: '816506e0c34aaf66249bcca19fa0741841a1dae5', class: "message", part: "message" }, this.message), h("span", { key: '15edfed427f793ad354d7b71e256149323ab59b4', class: "spacer" }), h("span", { key: 'abd85f3229fbc9ad3e6257400a87bab0e9743dae', class: "end", part: "end" }, h("slot", { key: 'bc0a1f8844f91d9158ec4f265ae12cc27b443740' }))));
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
IndStatusBar.style = statusBarCss();
|
|
16
|
+
|
|
17
|
+
export { IndStatusBar as ind_status_bar };
|
|
18
|
+
//# sourceMappingURL=ind-status-bar.entry.js.map
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=ind-status-bar.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-status-bar.entry.js","sources":["src/components/organisms/status-bar/status-bar.css?tag=ind-status-bar&encapsulation=shadow","src/components/organisms/status-bar/status-bar.tsx"],"sourcesContent":[":host {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n padding: var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-panel);\n border-top: 1px solid var(--ind-surface-border-default);\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n min-height: 24px;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.message {\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.spacer {\n flex: 1;\n}\n\n.end {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n}\n\n::slotted(*) {\n font-size: var(--ind-font-size-sm, 11px);\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type StatusBarState =\n | 'neutral' | 'running' | 'stopped' | 'fault' | 'warning' | 'maintenance' | 'success' | 'info' | 'error';\n\n/**\n * Global footer bar: status dot + message on the left, slotted content on the right.\n *\n * Sized to be unobtrusive (~24 px). Drop additional `<span>` / `<ind-button size=\"sm\">`\n * children for right-aligned context (timestamps, server identifiers, action buttons).\n */\n@Component({\n tag: 'ind-status-bar',\n styleUrl: 'status-bar.css',\n shadow: true,\n})\nexport class IndStatusBar {\n @Prop({ reflect: true }) state: StatusBarState = 'neutral';\n @Prop() message?: string;\n\n render() {\n return (\n <Host role=\"status\" aria-live=\"polite\">\n <ind-status-dot state={this.state} size=\"sm\" />\n {this.message && <span class=\"message\" part=\"message\">{this.message}</span>}\n <span class=\"spacer\" />\n <span class=\"end\" part=\"end\"><slot /></span>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,YAAY,GAAG,MAAM,CAAC,+pBAA+pB,CAAC;;MCgB/qB,YAAY,GAAA,MAAA;;;;IACE,KAAK,GAAmB,SAAS;AAClD,IAAA,OAAO;IAEf,MAAM,GAAA;QACJ,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,IAAI,EAAC,QAAQ,eAAW,QAAQ,EAAA,EACpC,CAAA,CAAA,gBAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAC,IAAI,EAAA,CAAG,EAC9C,IAAI,CAAC,OAAO,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EAAE,IAAI,CAAC,OAAO,CAAQ,EAC3E,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,QAAQ,EAAA,CAAG,EACvB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAA,EAAC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CAAO,CACvC;;;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const statusDotCss = () => `:host{display:inline-block;--_size:8px;--_bg:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));--_glow:transparent;width:var(--_size);height:var(--_size);border-radius:50%;background:var(--_bg);box-shadow:0 0 6px var(--_glow);flex-shrink:0;vertical-align:middle}:host([size="sm"]){--_size:6px}:host([size="md"]){--_size:8px}:host([size="lg"]){--_size:12px}:host([state="running"]){--_bg:var(--ind-state-running-bg, #16a34a);--_glow:var(--ind-state-running-glow, rgba(34, 197, 94, 0.6))}:host([state="stopped"]){--_bg:var(--ind-state-stopped-bg, #5a6776)}:host([state="fault"]){--_bg:var(--ind-state-fault-bg, #dc2626);--_glow:var(--ind-state-fault-glow, rgba(220, 38, 38, 0.7))}:host([state="warning"]){--_bg:var(--ind-state-warning-bg, #f59e0b);--_glow:var(--ind-state-warning-glow, rgba(245, 158, 11, 0.6))}:host([state="maintenance"]){--_bg:var(--ind-state-maintenance-bg, #2563eb);--_glow:var(--ind-state-maintenance-glow, rgba(37, 99, 235, 0.6))}:host([state="success"]){--_bg:var(--ind-feedback-success-bg, #16a34a);--_glow:rgba(34, 197, 94, 0.5)}:host([state="info"]){--_bg:var(--ind-feedback-info-bg, #0891b2);--_glow:rgba(8, 145, 178, 0.5)}:host([state="error"]){--_bg:var(--ind-feedback-error-bg, #dc2626);--_glow:rgba(220, 38, 38, 0.6)}:host([state="neutral"]){--_bg:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}:host([blinking]){animation:ind-status-dot-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite}@keyframes ind-status-dot-blink{50%{opacity:0.3;box-shadow:none}}@media (prefers-reduced-motion: reduce){:host([blinking]){animation:none;outline:2px solid currentColor;outline-offset:2px}}`;
|
|
4
|
+
|
|
5
|
+
const IndStatusDot = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
state = 'neutral';
|
|
10
|
+
size = 'md';
|
|
11
|
+
blinking = false;
|
|
12
|
+
/**
|
|
13
|
+
* Optional accessible name. Set when the dot stands alone; leave undefined
|
|
14
|
+
* when it's paired with adjacent text that already names the status.
|
|
15
|
+
*/
|
|
16
|
+
label;
|
|
17
|
+
render() {
|
|
18
|
+
if (this.label) {
|
|
19
|
+
return h(Host, { role: "status", "aria-label": this.label });
|
|
20
|
+
}
|
|
21
|
+
return h(Host, { "aria-hidden": "true" });
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
IndStatusDot.style = statusDotCss();
|
|
25
|
+
|
|
26
|
+
export { IndStatusDot as ind_status_dot };
|
|
27
|
+
//# sourceMappingURL=ind-status-dot.entry.js.map
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=ind-status-dot.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-status-dot.entry.js","sources":["src/components/atoms/status-dot/status-dot.css?tag=ind-status-dot&encapsulation=shadow","src/components/atoms/status-dot/status-dot.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --_size: 8px;\n --_bg: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n --_glow: transparent;\n\n width: var(--_size);\n height: var(--_size);\n border-radius: 50%;\n background: var(--_bg);\n box-shadow: 0 0 6px var(--_glow);\n flex-shrink: 0;\n vertical-align: middle;\n}\n\n:host([size=\"sm\"]) { --_size: 6px; }\n:host([size=\"md\"]) { --_size: 8px; }\n:host([size=\"lg\"]) { --_size: 12px; }\n\n:host([state=\"running\"]) {\n --_bg: var(--ind-state-running-bg, #16a34a);\n --_glow: var(--ind-state-running-glow, rgba(34, 197, 94, 0.6));\n}\n:host([state=\"stopped\"]) {\n --_bg: var(--ind-state-stopped-bg, #5a6776);\n}\n:host([state=\"fault\"]) {\n --_bg: var(--ind-state-fault-bg, #dc2626);\n --_glow: var(--ind-state-fault-glow, rgba(220, 38, 38, 0.7));\n}\n:host([state=\"warning\"]) {\n --_bg: var(--ind-state-warning-bg, #f59e0b);\n --_glow: var(--ind-state-warning-glow, rgba(245, 158, 11, 0.6));\n}\n:host([state=\"maintenance\"]) {\n --_bg: var(--ind-state-maintenance-bg, #2563eb);\n --_glow: var(--ind-state-maintenance-glow, rgba(37, 99, 235, 0.6));\n}\n:host([state=\"success\"]) {\n --_bg: var(--ind-feedback-success-bg, #16a34a);\n --_glow: rgba(34, 197, 94, 0.5);\n}\n:host([state=\"info\"]) {\n --_bg: var(--ind-feedback-info-bg, #0891b2);\n --_glow: rgba(8, 145, 178, 0.5);\n}\n:host([state=\"error\"]) {\n --_bg: var(--ind-feedback-error-bg, #dc2626);\n --_glow: rgba(220, 38, 38, 0.6);\n}\n:host([state=\"neutral\"]) {\n --_bg: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n:host([blinking]) {\n animation: ind-status-dot-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite;\n}\n\n@keyframes ind-status-dot-blink {\n 50% { opacity: 0.3; box-shadow: none; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([blinking]) {\n animation: none;\n outline: 2px solid currentColor;\n outline-offset: 2px;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type StatusDotState =\n | 'neutral'\n | 'running'\n | 'stopped'\n | 'fault'\n | 'warning'\n | 'maintenance'\n | 'success'\n | 'info'\n | 'error';\n\nexport type StatusDotSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-status-dot',\n styleUrl: 'status-dot.css',\n shadow: true,\n})\nexport class IndStatusDot {\n @Prop({ reflect: true }) state: StatusDotState = 'neutral';\n @Prop({ reflect: true }) size: StatusDotSize = 'md';\n @Prop({ reflect: true }) blinking: boolean = false;\n\n /**\n * Optional accessible name. Set when the dot stands alone; leave undefined\n * when it's paired with adjacent text that already names the status.\n */\n @Prop() label?: string;\n\n render() {\n if (this.label) {\n return <Host role=\"status\" aria-label={this.label} />;\n }\n return <Host aria-hidden=\"true\" />;\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,YAAY,GAAG,MAAM,CAAC,6mDAA6mD,CAAC;;MCoB7nD,YAAY,GAAA,MAAA;;;;IACE,KAAK,GAAmB,SAAS;IACjC,IAAI,GAAkB,IAAI;IAC1B,QAAQ,GAAY,KAAK;AAElD;;;AAGG;AACK,IAAA,KAAK;IAEb,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,OAAO,CAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAA,YAAA,EAAa,IAAI,CAAC,KAAK,EAAA,CAAI;;QAEvD,OAAO,CAAA,CAAC,IAAI,EAAA,EAAA,aAAA,EAAa,MAAM,GAAG;;;;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const textareaCss = () => `:host{display:inline-block;width:100%;font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5))}.wrap{display:flex;flex-direction:column;gap:var(--ind-spacing-2, 4px)}.label{font-size:var(--ind-font-size-sm, 11px);font-weight:var(--ind-font-weight-medium, 500);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));letter-spacing:0.04em;text-transform:uppercase}.textarea{width:100%;box-sizing:border-box;padding:var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-md, 3px);font-family:inherit;font-size:var(--ind-font-size-base, 12px);line-height:var(--ind-font-line-height-normal, 1.4);color:inherit;resize:vertical;outline:none;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);transition:border-color var(--ind-motion-duration-fast, 120ms), box-shadow var(--ind-motion-duration-fast, 120ms)}.textarea:focus{border-color:var(--ind-surface-focus-ring, #22d3ee);box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent)}.textarea::placeholder{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));opacity:1}:host([variant="mono"]) .textarea{font-family:var(--ind-font-family-mono);font-size:var(--ind-font-size-sm, 11px);line-height:var(--ind-font-line-height-tight, 1.4);background:var(--ind-color-palette-neutral-0, #000000);color:var(--ind-color-palette-neutral-800, #d0d7e0);border-color:var(--ind-surface-border-strong, #5a6776)}:host([invalid]) .textarea{border-color:var(--ind-feedback-error-bg, #dc2626)}:host([invalid]) .textarea:focus{box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent)}:host([readonly]) .textarea{cursor:default}:host([disabled]){opacity:0.55;pointer-events:none}`;
|
|
4
|
+
|
|
5
|
+
const IndTextarea = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
this.indInput = createEvent(this, "indInput");
|
|
9
|
+
this.indChange = createEvent(this, "indChange");
|
|
10
|
+
}
|
|
11
|
+
get host() { return getElement(this); }
|
|
12
|
+
value = '';
|
|
13
|
+
placeholder;
|
|
14
|
+
label;
|
|
15
|
+
name;
|
|
16
|
+
rows = 4;
|
|
17
|
+
size = 'md';
|
|
18
|
+
/** `mono` swaps to JetBrains Mono and small font — for logs and MQTT streams. */
|
|
19
|
+
variant = 'default';
|
|
20
|
+
disabled = false;
|
|
21
|
+
readonly = false;
|
|
22
|
+
invalid = false;
|
|
23
|
+
/** When true, auto-scrolls to bottom whenever `value` changes. Pair with `readonly` for log streams. */
|
|
24
|
+
autoScroll = false;
|
|
25
|
+
indInput;
|
|
26
|
+
indChange;
|
|
27
|
+
componentDidLoad() {
|
|
28
|
+
if (this.autoScroll)
|
|
29
|
+
this.scrollToBottom();
|
|
30
|
+
}
|
|
31
|
+
onValueChange() {
|
|
32
|
+
if (this.autoScroll)
|
|
33
|
+
this.scrollToBottom();
|
|
34
|
+
}
|
|
35
|
+
scrollToBottom() {
|
|
36
|
+
requestAnimationFrame(() => {
|
|
37
|
+
const ta = this.host.shadowRoot?.querySelector('textarea');
|
|
38
|
+
if (ta)
|
|
39
|
+
ta.scrollTop = ta.scrollHeight;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
onInput = (e) => {
|
|
43
|
+
const v = e.target.value;
|
|
44
|
+
this.value = v;
|
|
45
|
+
this.indInput.emit(v);
|
|
46
|
+
};
|
|
47
|
+
onChange = (e) => {
|
|
48
|
+
this.indChange.emit(e.target.value);
|
|
49
|
+
};
|
|
50
|
+
render() {
|
|
51
|
+
return (h(Host, { key: 'a4ca904c7a9ca65900e0ccc696aab66429bdde71' }, h("label", { key: '57f1880efe8a30a2bd5e1253c81f058360519c9f', class: "wrap", part: "wrap" }, this.label && h("span", { key: 'aa0367d91235eca6d69fd520617ea831b1ac71fc', class: "label", part: "label" }, this.label), h("textarea", { key: '2248ea771f4ac6f8ae9fb0cc12ea4ed038e7ab24', part: "textarea", class: "textarea", placeholder: this.placeholder, rows: this.rows, disabled: this.disabled, readonly: this.readonly, name: this.name, "aria-invalid": this.invalid ? 'true' : 'false', onInput: this.onInput, onChange: this.onChange }, this.value))));
|
|
52
|
+
}
|
|
53
|
+
static get watchers() { return {
|
|
54
|
+
"value": [{
|
|
55
|
+
"onValueChange": 0
|
|
56
|
+
}]
|
|
57
|
+
}; }
|
|
58
|
+
};
|
|
59
|
+
IndTextarea.style = textareaCss();
|
|
60
|
+
|
|
61
|
+
export { IndTextarea as ind_textarea };
|
|
62
|
+
//# sourceMappingURL=ind-textarea.entry.js.map
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=ind-textarea.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-textarea.entry.js","sources":["src/components/atoms/textarea/textarea.css?tag=ind-textarea&encapsulation=shadow","src/components/atoms/textarea/textarea.tsx"],"sourcesContent":[":host {\n display: inline-block;\n width: 100%;\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n}\n\n.wrap {\n display: flex;\n flex-direction: column;\n gap: var(--ind-spacing-2, 4px);\n}\n\n.label {\n font-size: var(--ind-font-size-sm, 11px);\n font-weight: var(--ind-font-weight-medium, 500);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.textarea {\n width: 100%;\n box-sizing: border-box;\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);\n background: var(--ind-surface-sunken, light-dark(#ffffff, #000000));\n border: 1px solid var(--ind-surface-border-default, #2a3340);\n border-radius: var(--ind-radius-md, 3px);\n font-family: inherit;\n font-size: var(--ind-font-size-base, 12px);\n line-height: var(--ind-font-line-height-normal, 1.4);\n color: inherit;\n resize: vertical;\n outline: none;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n transition:\n border-color var(--ind-motion-duration-fast, 120ms),\n box-shadow var(--ind-motion-duration-fast, 120ms);\n}\n\n.textarea:focus {\n border-color: var(--ind-surface-focus-ring, #22d3ee);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent);\n}\n\n.textarea::placeholder {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n opacity: 1;\n}\n\n:host([variant=\"mono\"]) .textarea {\n font-family: var(--ind-font-family-mono);\n font-size: var(--ind-font-size-sm, 11px);\n line-height: var(--ind-font-line-height-tight, 1.4);\n background: var(--ind-color-palette-neutral-0, #000000);\n color: var(--ind-color-palette-neutral-800, #d0d7e0);\n border-color: var(--ind-surface-border-strong, #5a6776);\n}\n\n:host([invalid]) .textarea {\n border-color: var(--ind-feedback-error-bg, #dc2626);\n}\n:host([invalid]) .textarea:focus {\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent);\n}\n\n:host([readonly]) .textarea {\n cursor: default;\n}\n\n:host([disabled]) {\n opacity: 0.55;\n pointer-events: none;\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\n\nexport type TextareaSize = 'sm' | 'md' | 'lg';\nexport type TextareaVariant = 'default' | 'mono';\n\n@Component({\n tag: 'ind-textarea',\n styleUrl: 'textarea.css',\n shadow: true,\n})\nexport class IndTextarea {\n @Element() host!: HTMLElement;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop() placeholder?: string;\n @Prop() label?: string;\n @Prop() name?: string;\n @Prop() rows: number = 4;\n @Prop({ reflect: true }) size: TextareaSize = 'md';\n /** `mono` swaps to JetBrains Mono and small font — for logs and MQTT streams. */\n @Prop({ reflect: true }) variant: TextareaVariant = 'default';\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) readonly: boolean = false;\n @Prop({ reflect: true }) invalid: boolean = false;\n /** When true, auto-scrolls to bottom whenever `value` changes. Pair with `readonly` for log streams. */\n @Prop() autoScroll: boolean = false;\n\n @Event() indInput!: EventEmitter<string>;\n @Event() indChange!: EventEmitter<string>;\n\n componentDidLoad() {\n if (this.autoScroll) this.scrollToBottom();\n }\n\n @Watch('value')\n onValueChange() {\n if (this.autoScroll) this.scrollToBottom();\n }\n\n private scrollToBottom() {\n requestAnimationFrame(() => {\n const ta = this.host.shadowRoot?.querySelector('textarea');\n if (ta) ta.scrollTop = ta.scrollHeight;\n });\n }\n\n private onInput = (e: Event) => {\n const v = (e.target as HTMLTextAreaElement).value;\n this.value = v;\n this.indInput.emit(v);\n };\n\n private onChange = (e: Event) => {\n this.indChange.emit((e.target as HTMLTextAreaElement).value);\n };\n\n render() {\n return (\n <Host>\n <label class=\"wrap\" part=\"wrap\">\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n <textarea\n part=\"textarea\"\n class=\"textarea\"\n placeholder={this.placeholder}\n rows={this.rows}\n disabled={this.disabled}\n readonly={this.readonly}\n name={this.name}\n aria-invalid={this.invalid ? 'true' : 'false'}\n onInput={this.onInput}\n onChange={this.onChange}\n >{this.value}</textarea>\n </label>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,24DAA24D,CAAC;;MCmB15D,WAAW,GAAA,MAAA;;;;;;;IAGG,KAAK,GAAW,EAAE;AACnC,IAAA,WAAW;AACX,IAAA,KAAK;AACL,IAAA,IAAI;IACJ,IAAI,GAAW,CAAC;IACC,IAAI,GAAiB,IAAI;;IAEzB,OAAO,GAAoB,SAAS;IACpC,QAAQ,GAAY,KAAK;IACzB,QAAQ,GAAY,KAAK;IACzB,OAAO,GAAY,KAAK;;IAEzC,UAAU,GAAY,KAAK;AAE1B,IAAA,QAAQ;AACR,IAAA,SAAS;IAElB,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,cAAc,EAAE;;IAI5C,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,cAAc,EAAE;;IAGpC,cAAc,GAAA;QACpB,qBAAqB,CAAC,MAAK;AACzB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC;AAC1D,YAAA,IAAI,EAAE;AAAE,gBAAA,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY;AACxC,SAAC,CAAC;;AAGI,IAAA,OAAO,GAAG,CAAC,CAAQ,KAAI;AAC7B,QAAA,MAAM,CAAC,GAAI,CAAC,CAAC,MAA8B,CAAC,KAAK;AACjD,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACvB,KAAC;AAEO,IAAA,QAAQ,GAAG,CAAC,CAAQ,KAAI;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,CAAC,MAA8B,CAAC,KAAK,CAAC;AAC9D,KAAC;IAED,MAAM,GAAA;AACJ,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAA,EAC5B,IAAI,CAAC,KAAK,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,EACnE,CAAA,CAAA,UAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,UAAU,EAChB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAA,cAAA,EACD,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,EAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAA,EACvB,IAAI,CAAC,KAAK,CAAY,CAClB,CACH;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const toolbarActionCss = () => `:host{display:flex;align-items:center;gap:var(--ind-spacing-4, 8px);padding:var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);background:var(--ind-surface-panel);border-bottom:1px solid var(--ind-surface-border-default);font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));flex-wrap:wrap}.filter ::slotted(*){min-width:200px}.flags{display:flex;align-items:center;gap:var(--ind-spacing-4, 8px)}.spacer{flex:1}.counter{font-family:var(--ind-font-family-mono);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));font-size:var(--ind-font-size-sm, 11px);white-space:nowrap}.actions{display:flex;gap:var(--ind-spacing-3, 6px)}`;
|
|
4
|
+
|
|
5
|
+
const IndToolbarAction = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
/** Counter rendered before the actions (e.g. "1 248 messages"). */
|
|
10
|
+
counter;
|
|
11
|
+
render() {
|
|
12
|
+
const hasCounter = this.counter !== undefined && this.counter !== '' && this.counter !== null;
|
|
13
|
+
return (h(Host, { key: '335b711876377ee50cfeaac4635c2794d5c038eb' }, h("span", { key: '69cf5e6ca388c2bef9004cddd515db9c1d34f2f9', class: "filter", part: "filter" }, h("slot", { key: '6a5d72136095b2531214ea2e28a39a795e8b7e2d', name: "filter" })), h("span", { key: '614f12f7432752c3deef9cca8174a503d7048878', class: "flags", part: "flags" }, h("slot", { key: 'db14ea5398c70574cb0b690db2e0578aafa6a545', name: "flags" })), h("span", { key: '07ff837c88d3228666b7bcd36ae52f9efa5b081d', class: "spacer" }), hasCounter && h("span", { key: 'ee9220383a9a4c9c471f4945da3c28f67dada3ee', class: "counter", part: "counter" }, this.counter), h("span", { key: '53bc247add97382c56d4447b30c9b73e663fbe96', class: "actions", part: "actions" }, h("slot", { key: 'da6c78e96a87a412f44d620356268ef1a746fc99', name: "actions" }))));
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
IndToolbarAction.style = toolbarActionCss();
|
|
17
|
+
|
|
18
|
+
export { IndToolbarAction as ind_toolbar_action };
|
|
19
|
+
//# sourceMappingURL=ind-toolbar-action.entry.js.map
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=ind-toolbar-action.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-toolbar-action.entry.js","sources":["src/components/molecules/toolbar-action/toolbar-action.css?tag=ind-toolbar-action&encapsulation=shadow","src/components/molecules/toolbar-action/toolbar-action.tsx"],"sourcesContent":[":host {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-panel);\n border-bottom: 1px solid var(--ind-surface-border-default);\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n flex-wrap: wrap;\n}\n\n.filter ::slotted(*) {\n min-width: 200px;\n}\n\n.flags {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n}\n\n.spacer { flex: 1; }\n\n.counter {\n font-family: var(--ind-font-family-mono);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n font-size: var(--ind-font-size-sm, 11px);\n white-space: nowrap;\n}\n\n.actions {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n@Component({\n tag: 'ind-toolbar-action',\n styleUrl: 'toolbar-action.css',\n shadow: true,\n})\nexport class IndToolbarAction {\n /** Counter rendered before the actions (e.g. \"1 248 messages\"). */\n @Prop() counter?: string | number;\n\n render() {\n const hasCounter = this.counter !== undefined && this.counter !== '' && this.counter !== null;\n return (\n <Host>\n <span class=\"filter\" part=\"filter\"><slot name=\"filter\" /></span>\n <span class=\"flags\" part=\"flags\"><slot name=\"flags\" /></span>\n <span class=\"spacer\" />\n {hasCounter && <span class=\"counter\" part=\"counter\">{this.counter}</span>}\n <span class=\"actions\" part=\"actions\"><slot name=\"actions\" /></span>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,yvBAAyvB,CAAC;;MCO7wB,gBAAgB,GAAA,MAAA;;;;;AAEnB,IAAA,OAAO;IAEf,MAAM,GAAA;AACJ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;AAC7F,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAA,EAAC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,QAAQ,EAAA,CAAG,CAAO,EAChE,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,EAAC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,OAAO,EAAA,CAAG,CAAO,EAC7D,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,QAAQ,EAAA,CAAG,EACtB,UAAU,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EAAE,IAAI,CAAC,OAAO,CAAQ,EACzE,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EAAC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,SAAS,GAAG,CAAO,CAC9D;;;;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const valueCss = () => `:host{display:inline-flex;flex-direction:column;gap:var(--ind-spacing-2, 4px);padding:var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px);background:var(--ind-surface-sunken, #000);border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-md, 3px);font-family:var(--ind-font-family-sans);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));min-width:96px;transition:background-color var(--ind-motion-duration-base, 200ms), border-color var(--ind-motion-duration-base, 200ms), color var(--ind-motion-duration-base, 200ms)}.header{display:flex;gap:var(--ind-spacing-3, 6px);align-items:baseline;font-size:var(--ind-font-size-sm, 11px);line-height:var(--ind-font-line-height-tight, 1.1);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2))}.tag{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600);letter-spacing:0.02em}.label{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.readout{display:flex;align-items:baseline;gap:var(--ind-spacing-2, 4px);line-height:1}.number{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-bold, 700);font-variant-numeric:tabular-nums}.unit{font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));font-weight:var(--ind-font-weight-medium, 500)}.trend{font-size:var(--ind-font-size-md, 13px);margin-left:var(--ind-spacing-2, 4px)}:host([size="sm"]) .number{font-size:var(--ind-font-size-xl, 16px)}:host([size="md"]) .number{font-size:var(--ind-font-size-2xl, 20px)}:host([size="lg"]) .number{font-size:var(--ind-font-size-3xl, 28px)}:host([alarm="high-high"]){background:var(--ind-alarm-high-high-bg, #dc2626);color:var(--ind-alarm-high-high-fg, #ffffff);border-color:var(--ind-alarm-high-high-border, #f87171)}:host([alarm="high"]){background:var(--ind-alarm-high-bg, #f59e0b);color:var(--ind-alarm-high-fg, #000000);border-color:var(--ind-alarm-high-border, #fcd34d)}:host([alarm="low"]){background:var(--ind-alarm-low-bg, #0891b2);color:var(--ind-alarm-low-fg, #ffffff);border-color:var(--ind-alarm-low-border, #22d3ee)}:host([alarm="low-low"]){background:var(--ind-alarm-low-low-bg, #7c3aed);color:var(--ind-alarm-low-low-fg, #ffffff);border-color:var(--ind-alarm-low-low-border, #a78bfa)}:host([alarm]:not([alarm="none"])) .header,:host([alarm]:not([alarm="none"])) .tag,:host([alarm]:not([alarm="none"])) .label,:host([alarm]:not([alarm="none"])) .unit{color:inherit}:host([alarm]:not([alarm="none"])) .label,:host([alarm]:not([alarm="none"])) .unit{opacity:0.85}:host([alarm]:not([alarm="none"])) .tag{opacity:1;font-weight:var(--ind-font-weight-bold, 700)}:host([trend="up"]) .trend{color:var(--ind-trend-up-fg, #fcd34d)}:host([trend="down"]) .trend{color:var(--ind-trend-down-fg, #22d3ee)}:host([trend="stable"]) .trend{color:var(--ind-trend-stable-fg, #8390a0)}`;
|
|
4
|
+
|
|
5
|
+
const IndValue = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
/** Raw value to display. Numeric values are formatted with `precision`. */
|
|
10
|
+
value;
|
|
11
|
+
/** Engineering unit shown after the number (e.g. "bar", "°C", "m³/h"). */
|
|
12
|
+
unit;
|
|
13
|
+
/** Decimal places when `value` is numeric. Default: as-is. */
|
|
14
|
+
precision;
|
|
15
|
+
/** Active alarm priority. Highlights the readout with the ISA-18.2 color. */
|
|
16
|
+
alarm = 'none';
|
|
17
|
+
/** Process trend direction. Renders a small arrow next to the unit. */
|
|
18
|
+
trend = 'none';
|
|
19
|
+
/** Readout size — `lg` is appropriate for primary KPIs (uses the 3xl font). */
|
|
20
|
+
size = 'md';
|
|
21
|
+
/** Human label shown above the number (e.g. "Discharge pressure"). */
|
|
22
|
+
label;
|
|
23
|
+
/** Equipment tag shown above the number (e.g. "PT-101"). */
|
|
24
|
+
tag;
|
|
25
|
+
formatted() {
|
|
26
|
+
if (typeof this.value === 'string')
|
|
27
|
+
return this.value;
|
|
28
|
+
if (!Number.isFinite(this.value))
|
|
29
|
+
return '--';
|
|
30
|
+
if (this.precision !== undefined)
|
|
31
|
+
return this.value.toFixed(this.precision);
|
|
32
|
+
return String(this.value);
|
|
33
|
+
}
|
|
34
|
+
render() {
|
|
35
|
+
const accessibleName = this.label ?? this.tag ?? 'process value';
|
|
36
|
+
const alarmSuffix = this.alarm !== 'none' ? `, alarm ${this.alarm}` : '';
|
|
37
|
+
return (h(Host, { key: 'cda5c03f956f161e618626d2aef0aac40409281a', role: "group", "aria-label": `${accessibleName}: ${this.formatted()}${this.unit ? ' ' + this.unit : ''}${alarmSuffix}`, "aria-live": this.alarm === 'high-high' ? 'assertive' : 'polite' }, (this.tag || this.label) && (h("div", { key: '8fe9dfd6fb733e6ba0e7e607efc5d023736cca9e', class: "header", part: "header" }, this.tag && h("span", { key: 'adec308000bce2cee378504fffedf8662a091c8c', class: "tag", part: "tag" }, this.tag), this.label && h("span", { key: '4de4405dfbb798ca1781ade6fd7e1419089226ca', class: "label", part: "label" }, this.label))), h("div", { key: 'b7f9e66b333a6d7e3341585af4bba571dae65bf6', class: "readout", part: "readout" }, h("span", { key: 'c6a942f2a64187cf9acd75b112d262928556d84b', class: "number", part: "number" }, this.formatted()), this.unit && h("span", { key: '39714e17d50497d59afe6e81eca9b51cf2182332', class: "unit", part: "unit" }, this.unit), this.trend !== 'none' && (h("span", { key: '1e4f671cc86bf24617f26e3db4eb3709160291b3', class: "trend", part: "trend", "aria-hidden": "true" }, this.trend === 'up' ? '▲' : this.trend === 'down' ? '▼' : '◆')))));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
IndValue.style = valueCss();
|
|
41
|
+
|
|
42
|
+
export { IndValue as ind_value };
|
|
43
|
+
//# sourceMappingURL=ind-value.entry.js.map
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=ind-value.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-value.entry.js","sources":["src/components/atoms/value/value.css?tag=ind-value&encapsulation=shadow","src/components/atoms/value/value.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: column;\n gap: var(--ind-spacing-2, 4px);\n padding: var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-sunken, #000);\n border: 1px solid var(--ind-surface-border-default, #2a3340);\n border-radius: var(--ind-radius-md, 3px);\n font-family: var(--ind-font-family-sans);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n min-width: 96px;\n transition:\n background-color var(--ind-motion-duration-base, 200ms),\n border-color var(--ind-motion-duration-base, 200ms),\n color var(--ind-motion-duration-base, 200ms);\n}\n\n.header {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n align-items: baseline;\n font-size: var(--ind-font-size-sm, 11px);\n line-height: var(--ind-font-line-height-tight, 1.1);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n}\n\n.tag {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n letter-spacing: 0.02em;\n}\n\n.label {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n.readout {\n display: flex;\n align-items: baseline;\n gap: var(--ind-spacing-2, 4px);\n line-height: 1;\n}\n\n.number {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-bold, 700);\n font-variant-numeric: tabular-nums;\n}\n\n.unit {\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n font-weight: var(--ind-font-weight-medium, 500);\n}\n\n.trend {\n font-size: var(--ind-font-size-md, 13px);\n margin-left: var(--ind-spacing-2, 4px);\n}\n\n:host([size=\"sm\"]) .number { font-size: var(--ind-font-size-xl, 16px); }\n:host([size=\"md\"]) .number { font-size: var(--ind-font-size-2xl, 20px); }\n:host([size=\"lg\"]) .number { font-size: var(--ind-font-size-3xl, 28px); }\n\n/* Alarm highlight — uses the ISA-18.2 alarm tokens directly. */\n:host([alarm=\"high-high\"]) {\n background: var(--ind-alarm-high-high-bg, #dc2626);\n color: var(--ind-alarm-high-high-fg, #ffffff);\n border-color: var(--ind-alarm-high-high-border, #f87171);\n}\n:host([alarm=\"high\"]) {\n background: var(--ind-alarm-high-bg, #f59e0b);\n color: var(--ind-alarm-high-fg, #000000);\n border-color: var(--ind-alarm-high-border, #fcd34d);\n}\n:host([alarm=\"low\"]) {\n background: var(--ind-alarm-low-bg, #0891b2);\n color: var(--ind-alarm-low-fg, #ffffff);\n border-color: var(--ind-alarm-low-border, #22d3ee);\n}\n:host([alarm=\"low-low\"]) {\n background: var(--ind-alarm-low-low-bg, #7c3aed);\n color: var(--ind-alarm-low-low-fg, #ffffff);\n border-color: var(--ind-alarm-low-low-border, #a78bfa);\n}\n\n/* When in an alarm state, force every descendant to inherit the host color\n * (which is the high-contrast alarm fg, e.g. black on amber for \"high\").\n *\n * We have to override `.header` explicitly because it sets its own color —\n * otherwise `.label` and `.tag` inherit *from .header*, not from :host,\n * and stay at the original muted neutral color (broken contrast on alarm bg).\n */\n:host([alarm]:not([alarm=\"none\"])) .header,\n:host([alarm]:not([alarm=\"none\"])) .tag,\n:host([alarm]:not([alarm=\"none\"])) .label,\n:host([alarm]:not([alarm=\"none\"])) .unit {\n color: inherit;\n}\n\n/* The tag identifies WHICH instrument is alarming — keep it at full opacity\n * so operators can read it at a glance. Label/unit can be slightly faded. */\n:host([alarm]:not([alarm=\"none\"])) .label,\n:host([alarm]:not([alarm=\"none\"])) .unit {\n opacity: 0.85;\n}\n:host([alarm]:not([alarm=\"none\"])) .tag {\n opacity: 1;\n font-weight: var(--ind-font-weight-bold, 700);\n}\n\n:host([trend=\"up\"]) .trend { color: var(--ind-trend-up-fg, #fcd34d); }\n:host([trend=\"down\"]) .trend { color: var(--ind-trend-down-fg, #22d3ee); }\n:host([trend=\"stable\"]) .trend { color: var(--ind-trend-stable-fg, #8390a0); }\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ValueAlarm = 'none' | 'low-low' | 'low' | 'high' | 'high-high';\nexport type ValueTrend = 'none' | 'up' | 'down' | 'stable';\nexport type ValueSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-value',\n styleUrl: 'value.css',\n shadow: true,\n})\nexport class IndValue {\n /** Raw value to display. Numeric values are formatted with `precision`. */\n @Prop() value!: number | string;\n\n /** Engineering unit shown after the number (e.g. \"bar\", \"°C\", \"m³/h\"). */\n @Prop() unit?: string;\n\n /** Decimal places when `value` is numeric. Default: as-is. */\n @Prop() precision?: number;\n\n /** Active alarm priority. Highlights the readout with the ISA-18.2 color. */\n @Prop({ reflect: true }) alarm: ValueAlarm = 'none';\n\n /** Process trend direction. Renders a small arrow next to the unit. */\n @Prop({ reflect: true }) trend: ValueTrend = 'none';\n\n /** Readout size — `lg` is appropriate for primary KPIs (uses the 3xl font). */\n @Prop({ reflect: true }) size: ValueSize = 'md';\n\n /** Human label shown above the number (e.g. \"Discharge pressure\"). */\n @Prop() label?: string;\n\n /** Equipment tag shown above the number (e.g. \"PT-101\"). */\n @Prop() tag?: string;\n\n private formatted(): string {\n if (typeof this.value === 'string') return this.value;\n if (!Number.isFinite(this.value)) return '--';\n if (this.precision !== undefined) return this.value.toFixed(this.precision);\n return String(this.value);\n }\n\n render() {\n const accessibleName = this.label ?? this.tag ?? 'process value';\n const alarmSuffix = this.alarm !== 'none' ? `, alarm ${this.alarm}` : '';\n return (\n <Host\n role=\"group\"\n aria-label={`${accessibleName}: ${this.formatted()}${this.unit ? ' ' + this.unit : ''}${alarmSuffix}`}\n aria-live={this.alarm === 'high-high' ? 'assertive' : 'polite'}\n >\n {(this.tag || this.label) && (\n <div class=\"header\" part=\"header\">\n {this.tag && <span class=\"tag\" part=\"tag\">{this.tag}</span>}\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n </div>\n )}\n <div class=\"readout\" part=\"readout\">\n <span class=\"number\" part=\"number\">{this.formatted()}</span>\n {this.unit && <span class=\"unit\" part=\"unit\">{this.unit}</span>}\n {this.trend !== 'none' && (\n <span class=\"trend\" part=\"trend\" aria-hidden=\"true\">\n {this.trend === 'up' ? '▲' : this.trend === 'down' ? '▼' : '◆'}\n </span>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,o5FAAo5F,CAAC;;MCWh6F,QAAQ,GAAA,MAAA;;;;;AAEX,IAAA,KAAK;;AAGL,IAAA,IAAI;;AAGJ,IAAA,SAAS;;IAGQ,KAAK,GAAe,MAAM;;IAG1B,KAAK,GAAe,MAAM;;IAG1B,IAAI,GAAc,IAAI;;AAGvC,IAAA,KAAK;;AAGL,IAAA,GAAG;IAEH,SAAS,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAC7C,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3E,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG3B,MAAM,GAAA;QACJ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,eAAe;AAChE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE;AACxE,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,IAAI,EAAC,OAAO,gBACA,CAAA,EAAG,cAAc,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA,EAAG,WAAW,CAAA,CAAE,EAAA,WAAA,EAC1F,IAAI,CAAC,KAAK,KAAK,WAAW,GAAG,WAAW,GAAG,QAAQ,EAAA,EAE7D,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,MACtB,4DAAK,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAA,EAC9B,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAA,EAAE,IAAI,CAAC,GAAG,CAAQ,EAC1D,IAAI,CAAC,KAAK,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CAC/D,CACP,EACD,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EACjC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAA,EAAE,IAAI,CAAC,SAAS,EAAE,CAAQ,EAC3D,IAAI,CAAC,IAAI,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAA,EAAE,IAAI,CAAC,IAAI,CAAQ,EAC9D,IAAI,CAAC,KAAK,KAAK,MAAM,KACpB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,aAAA,EAAa,MAAM,IAChD,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG,CACzD,CACR,CACG,CACD;;;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { r as registerInstance, h, H as Host } from './index-D2yNiL0d.js';
|
|
2
|
+
|
|
3
|
+
const valveCss = () => `:host{display:inline-flex;flex-direction:column;align-items:center;gap:var(--ind-spacing-2, 4px);font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-base, 12px);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.symbol{--_w:var(--ind-valve-width, 48px);--_fill:var(--ind-state-stopped-bg, #5a6776);--_stroke:var(--ind-state-stopped-border, #8390a0);width:var(--_w);height:calc(var(--_w) / 2);display:block}:host([orientation="vertical"]) .symbol{transform:rotate(90deg)}:host([size="sm"]) .symbol{--_w:32px}:host([size="md"]) .symbol{--_w:48px}:host([size="lg"]) .symbol{--_w:72px}.left,.right{fill:var(--_fill);stroke:var(--_stroke);stroke-width:1.25;stroke-linejoin:round;transition:fill var(--ind-motion-duration-base, 200ms), stroke var(--ind-motion-duration-base, 200ms)}.stem{stroke:var(--_stroke);stroke-width:2;stroke-linecap:round}:host([state="open"]) .symbol{--_fill:var(--ind-state-running-bg, #16a34a);--_stroke:var(--ind-state-running-border, #4ade80)}:host([state="closed"]) .symbol{--_fill:var(--ind-state-stopped-bg, #5a6776);--_stroke:var(--ind-state-stopped-border, #8390a0)}:host([state="fault"]) .symbol{--_fill:var(--ind-state-fault-bg, #dc2626);--_stroke:var(--ind-state-fault-border, #f87171)}:host([state="transit"]) .symbol{--_fill:var(--ind-state-warning-bg, #f59e0b);--_stroke:var(--ind-state-warning-border, #fcd34d)}:host([state="transit"]) .left,:host([state="transit"]) .right{stroke-dasharray:4 2;animation:ind-valve-march var(--ind-motion-blink-slow, 1000ms) linear infinite}@keyframes ind-valve-march{to{stroke-dashoffset:-6}}.caption{display:flex;gap:var(--ind-spacing-3, 6px);align-items:baseline;font-size:var(--ind-font-size-sm, 11px)}.tag{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600)}.label{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}@media (prefers-reduced-motion: reduce){:host([state="transit"]) .left,:host([state="transit"]) .right{animation:none;stroke-dasharray:4 2}}`;
|
|
4
|
+
|
|
5
|
+
const IndValve = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
/** Valve state. `transit` is mid-stroke (transitioning between open and closed). */
|
|
10
|
+
state = 'closed';
|
|
11
|
+
/** Render the symbol along the flow direction. */
|
|
12
|
+
orientation = 'horizontal';
|
|
13
|
+
/** Visual size. */
|
|
14
|
+
size = 'md';
|
|
15
|
+
/** Human label rendered as caption (e.g. "Discharge valve"). */
|
|
16
|
+
label;
|
|
17
|
+
/** Equipment tag rendered as caption (e.g. "V-12"). */
|
|
18
|
+
tag;
|
|
19
|
+
render() {
|
|
20
|
+
const name = this.label ?? this.tag ?? 'valve';
|
|
21
|
+
return (h(Host, { key: 'f0a9a4f7a1401c7ffc091bb10e52d13854e0fd42', role: "img", "aria-label": `${name} — ${this.state}` }, h("svg", { key: '1ba7a6466df31802d8ca141016670c6c301bc066', class: "symbol", part: "symbol", viewBox: "0 0 32 16", "aria-hidden": "true" }, h("polygon", { key: '89f77217a84e53606ce38e126c8ce87358fafb8b', class: "left", part: "left", points: "2,2 2,14 16,8" }), h("polygon", { key: '12ca5cd5ad1c117c48cc54275fe98509daba3267', class: "right", part: "right", points: "30,2 30,14 16,8" }), h("line", { key: '24510448beca41c7ab421b61c06de63840bddf99', class: "stem", part: "stem", x1: "16", y1: "2", x2: "16", y2: "14" })), (this.tag || this.label) && (h("div", { key: '18b6f7a60c0fdb8b5b7a688d5f6151811a9d587b', class: "caption", part: "caption" }, this.tag && h("span", { key: '7a8eb4c486380e3cb1a92e1ab3bdcbd2689cbd50', class: "tag", part: "tag" }, this.tag), this.label && h("span", { key: '6281ca7b4ae18e455a28b18890d28c58f38c14c1', class: "label", part: "label" }, this.label)))));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
IndValve.style = valveCss();
|
|
25
|
+
|
|
26
|
+
export { IndValve as ind_valve };
|
|
27
|
+
//# sourceMappingURL=ind-valve.entry.js.map
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=ind-valve.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ind-valve.entry.js","sources":["src/components/atoms/valve/valve.css?tag=ind-valve&encapsulation=shadow","src/components/atoms/valve/valve.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ind-spacing-2, 4px);\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-base, 12px);\n /* `light-dark()` makes the fallback adapt to the page's color-scheme so the\n * caption stays readable even if the atom lands on a surface whose theme\n * doesn't match the loaded tokens (e.g. Storybook autodocs on white). */\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.symbol {\n --_w: var(--ind-valve-width, 48px);\n --_fill: var(--ind-state-stopped-bg, #5a6776);\n --_stroke: var(--ind-state-stopped-border, #8390a0);\n\n width: var(--_w);\n height: calc(var(--_w) / 2);\n display: block;\n}\n\n:host([orientation=\"vertical\"]) .symbol {\n transform: rotate(90deg);\n}\n\n:host([size=\"sm\"]) .symbol { --_w: 32px; }\n:host([size=\"md\"]) .symbol { --_w: 48px; }\n:host([size=\"lg\"]) .symbol { --_w: 72px; }\n\n.left,\n.right {\n fill: var(--_fill);\n stroke: var(--_stroke);\n stroke-width: 1.25;\n stroke-linejoin: round;\n transition:\n fill var(--ind-motion-duration-base, 200ms),\n stroke var(--ind-motion-duration-base, 200ms);\n}\n\n.stem {\n stroke: var(--_stroke);\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n:host([state=\"open\"]) .symbol {\n --_fill: var(--ind-state-running-bg, #16a34a);\n --_stroke: var(--ind-state-running-border, #4ade80);\n}\n:host([state=\"closed\"]) .symbol {\n --_fill: var(--ind-state-stopped-bg, #5a6776);\n --_stroke: var(--ind-state-stopped-border, #8390a0);\n}\n:host([state=\"fault\"]) .symbol {\n --_fill: var(--ind-state-fault-bg, #dc2626);\n --_stroke: var(--ind-state-fault-border, #f87171);\n}\n:host([state=\"transit\"]) .symbol {\n --_fill: var(--ind-state-warning-bg, #f59e0b);\n --_stroke: var(--ind-state-warning-border, #fcd34d);\n}\n\n/* Transit: marching ants on the perimeter — universally read as\n * \"in motion / transitioning\" by control room operators. */\n:host([state=\"transit\"]) .left,\n:host([state=\"transit\"]) .right {\n stroke-dasharray: 4 2;\n animation: ind-valve-march var(--ind-motion-blink-slow, 1000ms) linear infinite;\n}\n\n@keyframes ind-valve-march {\n to { stroke-dashoffset: -6; }\n}\n\n.caption {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n align-items: baseline;\n font-size: var(--ind-font-size-sm, 11px);\n}\n\n.tag {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n}\n\n.label {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([state=\"transit\"]) .left,\n :host([state=\"transit\"]) .right {\n animation: none;\n stroke-dasharray: 4 2;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ValveState = 'open' | 'closed' | 'transit' | 'fault';\nexport type ValveOrientation = 'horizontal' | 'vertical';\nexport type ValveSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-valve',\n styleUrl: 'valve.css',\n shadow: true,\n})\nexport class IndValve {\n /** Valve state. `transit` is mid-stroke (transitioning between open and closed). */\n @Prop({ reflect: true }) state: ValveState = 'closed';\n\n /** Render the symbol along the flow direction. */\n @Prop({ reflect: true }) orientation: ValveOrientation = 'horizontal';\n\n /** Visual size. */\n @Prop({ reflect: true }) size: ValveSize = 'md';\n\n /** Human label rendered as caption (e.g. \"Discharge valve\"). */\n @Prop() label?: string;\n\n /** Equipment tag rendered as caption (e.g. \"V-12\"). */\n @Prop() tag?: string;\n\n render() {\n const name = this.label ?? this.tag ?? 'valve';\n return (\n <Host\n role=\"img\"\n aria-label={`${name} — ${this.state}`}\n >\n {/* ISA-5.1 bowtie symbol. ViewBox is 32×16 so the natural ratio is 2:1. */}\n <svg class=\"symbol\" part=\"symbol\" viewBox=\"0 0 32 16\" aria-hidden=\"true\">\n <polygon class=\"left\" part=\"left\" points=\"2,2 2,14 16,8\" />\n <polygon class=\"right\" part=\"right\" points=\"30,2 30,14 16,8\" />\n <line class=\"stem\" part=\"stem\" x1=\"16\" y1=\"2\" x2=\"16\" y2=\"14\" />\n </svg>\n {(this.tag || this.label) && (\n <div class=\"caption\" part=\"caption\">\n {this.tag && <span class=\"tag\" part=\"tag\">{this.tag}</span>}\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qiEAAqiE,CAAC;;MCWjjE,QAAQ,GAAA,MAAA;;;;;IAEM,KAAK,GAAe,QAAQ;;IAG5B,WAAW,GAAqB,YAAY;;IAG5C,IAAI,GAAc,IAAI;;AAGvC,IAAA,KAAK;;AAGL,IAAA,GAAG;IAEX,MAAM,GAAA;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO;QAC9C,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,IAAI,EAAC,KAAK,EAAA,YAAA,EACE,CAAA,EAAG,IAAI,MAAM,IAAI,CAAC,KAAK,CAAA,CAAE,EAAA,EAGrC,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,WAAW,EAAA,aAAA,EAAa,MAAM,EAAA,EACtE,CAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,KAAK,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM,EAAE,MAAM,EAAC,eAAe,EAAA,CAAG,EAC7D,CAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,MAAM,EAAC,iBAAiB,EAAA,CAAG,EAC/D,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,KAAK,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,CACjE,EACL,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,MACtB,4DAAK,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EAChC,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAA,EAAE,IAAI,CAAC,GAAG,CAAQ,EAC1D,IAAI,CAAC,KAAK,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CAC/D,CACP,CACI;;;;;;;"}
|