hpv-tree-action
Version:
Zero-dependency JavaScript library for building interactive treeviews with hierarchical permissions, lazy loading, event-driven updates, and advanced search capabilities.
1 lines • 4.16 kB
CSS
@keyframes tree-action-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tree-action-highlight-pulse{0%{background-color:rgba(74,158,255,.3)}100%{background-color:rgba(74,158,255,.1)}}.action-legend{padding:10px;background-color:#f9f9f9;border-bottom:1px solid #ddd;display:flex;align-items:center;gap:8px;justify-content:center}.legend-item{display:flex;align-items:center;font-size:12px;margin-right:12px}.legend-color{width:16px;height:16px;border:1px solid #ccc;border-radius:3px;margin-right:4px}.tree-action-wrapper{font-family:sans-serif;font-size:14px;color:#333;border:1px solid #ddd;border-radius:4px;overflow:hidden}.tree-action-button{margin-right:5px}.level-controls{display:flex;align-items:center}.level-input{width:60px;margin-right:10px;padding:5px;border:1px solid #ccc;border-radius:4px}.tree-action-header{background-color:#f0f0f0;padding:8px 10px;border-bottom:1px solid #ddd}.operations-list{display:flex;align-items:center}.operations-title{flex-basis:200px;min-width:150px;font-weight:700;padding-right:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.operation-type{width:30px;text-align:center;font-weight:700;cursor:help}.search-controls{padding:10px;background-color:#f9f9f9;border-bottom:1px solid #ddd;display:flex;align-items:center;gap:8px}.search-input{flex:1;padding:6px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px;min-width:200px;transition:all .2s ease}.search-input:focus{outline:0;border-color:#4a9eff;box-shadow:0 0 0 2px rgba(74,158,255,.2)}.search-input::-moz-placeholder{color:#999}.search-input::placeholder{color:#999}.node-name.match{background-color:rgba(74,158,255,.1);border-radius:0 2px 2px 0;padding:2px 4px 2px 8px;margin:-2px 0;border-left:3px solid #4a9eff;animation:tree-action-highlight-pulse 2s ease-in-out 1}.node-name.contains-match{color:#4a9eff;font-weight:500}.node-name .match-text{background-color:rgba(74,158,255,.3);border-radius:2px;padding:0 2px;font-weight:500}.level-controls{padding:10px;background-color:#f9f9f9;border-bottom:1px solid #ddd;display:flex;align-items:center;flex-wrap:wrap}.level-input{padding:5px;border:1px solid #ccc;border-radius:4px;width:60px;margin-right:10px}.tree-action-button{padding:5px 10px;margin-right:5px;border:1px solid #ccc;border-radius:4px;background-color:#eee;cursor:pointer;font-size:12px}.tree-action-button:hover{background-color:#e0e0e0}.tree-container{padding:10px}.tree-node{display:flex;align-items:center;padding:5px 0;border-bottom:1px dotted #eee;min-height:30px;transition:background-color .2s ease}.tree-node:hover{background-color:rgba(74,158,255,.05)}.tree-node:last-child{border-bottom:none}.toggle-indicator{width:20px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0}.node-icon{margin-right:5px;flex-shrink:0}.node-name{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:10px}.node-name-lazy{font-style:italic}.node-operations{display:flex;flex-shrink:0}.operation-button{min-width:30px;height:24px;padding-right:4px;padding-left:4px;margin:0 2px;border:1px solid #ccc;border-radius:3px;cursor:pointer;font-size:10px;text-align:center;line-height:22px;background-color:#fff;transition:background-color .2s ease}.operation-button:hover{background-color:#f0f0f0}.operation-button.state-unselected{background-color:#fff;border-color:#ccc;color:#333}.operation-button.state-allowed{background-color:#d4edda;border-color:#28a745;color:#155724}.operation-button.state-denied{background-color:#f8d7da;border-color:#dc3545;color:#721c24}.operation-button.state-mixed{background:linear-gradient(45deg,#ffc107 50%,#fff 50%);border-color:#ffc107;color:#333}.operation-button.state-disabled{background-color:#eee;border-color:#ccc;color:#999;cursor:not-allowed;opacity:.7}.loading-indicator{padding:10px;text-align:center;font-style:italic;color:#666;display:flex;align-items:center;justify-content:center;gap:8px}.loading-indicator::before{content:"";width:16px;height:16px;border:2px solid #ccc;border-top-color:#666;border-radius:50%;display:inline-block;animation:tree-action-spin .5s infinite linear}