@wrrdev/fenix-ui 1.0.5 → 1.0.7

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.
Files changed (129) hide show
  1. package/README.md +314 -314
  2. package/dist/.nojekyll +0 -0
  3. package/dist/components/accordion/accordion.d.ts +72 -0
  4. package/dist/components/accordion/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion/accordion.js +277 -0
  6. package/dist/components/accordion/accordion.js.map +1 -0
  7. package/dist/components/accordion/index.d.ts +2 -0
  8. package/dist/components/accordion/index.d.ts.map +1 -0
  9. package/dist/components/accordion/index.js +9 -0
  10. package/dist/components/accordion/index.js.map +1 -0
  11. package/dist/components/calendar/calendar.d.ts +2 -2
  12. package/dist/components/calendar/calendar.d.ts.map +1 -1
  13. package/dist/components/calendar/calendar.js +187 -89
  14. package/dist/components/calendar/calendar.js.map +1 -1
  15. package/dist/components/dropdown/dropdown.d.ts.map +1 -1
  16. package/dist/components/dropdown/dropdown.js +1 -1
  17. package/dist/components/dropdown/dropdown.js.map +1 -1
  18. package/dist/components/knob/index.d.ts +8 -0
  19. package/dist/components/knob/index.d.ts.map +1 -0
  20. package/dist/components/knob/index.js +7 -0
  21. package/dist/components/knob/index.js.map +1 -0
  22. package/dist/components/knob/knob.d.ts +51 -0
  23. package/dist/components/knob/knob.d.ts.map +1 -0
  24. package/dist/components/knob/knob.js +323 -0
  25. package/dist/components/knob/knob.js.map +1 -0
  26. package/dist/components/orderlist/index.d.ts +3 -0
  27. package/dist/components/orderlist/index.d.ts.map +1 -0
  28. package/dist/components/orderlist/index.js +7 -0
  29. package/dist/components/orderlist/index.js.map +1 -0
  30. package/dist/components/orderlist/orderlist.d.ts +78 -0
  31. package/dist/components/orderlist/orderlist.d.ts.map +1 -0
  32. package/dist/components/orderlist/orderlist.js +666 -0
  33. package/dist/components/orderlist/orderlist.js.map +1 -0
  34. package/dist/components/picklist/index.d.ts +3 -0
  35. package/dist/components/picklist/index.d.ts.map +1 -0
  36. package/dist/components/picklist/index.js +7 -0
  37. package/dist/components/picklist/index.js.map +1 -0
  38. package/dist/components/picklist/picklist.d.ts +102 -0
  39. package/dist/components/picklist/picklist.d.ts.map +1 -0
  40. package/dist/components/picklist/picklist.js +749 -0
  41. package/dist/components/picklist/picklist.js.map +1 -0
  42. package/dist/components/tooltip/directive.d.ts +31 -0
  43. package/dist/components/tooltip/directive.d.ts.map +1 -0
  44. package/dist/components/tooltip/directive.js +294 -0
  45. package/dist/components/tooltip/directive.js.map +1 -0
  46. package/dist/components/tooltip/index.d.ts +2 -1
  47. package/dist/components/tooltip/index.d.ts.map +1 -1
  48. package/dist/components/tooltip/index.js +4 -1
  49. package/dist/components/tooltip/index.js.map +1 -1
  50. package/dist/core/presets.d.ts.map +1 -1
  51. package/dist/core/presets.js +48 -9
  52. package/dist/core/presets.js.map +1 -1
  53. package/dist/core/tokens.d.ts.map +1 -1
  54. package/dist/core/tokens.js +4 -4
  55. package/dist/core/tokens.js.map +1 -1
  56. package/dist/docs/app.d.ts +3 -25
  57. package/dist/docs/app.d.ts.map +1 -1
  58. package/dist/docs/componentes/accordion.doc.d.ts +8 -0
  59. package/dist/docs/componentes/accordion.doc.d.ts.map +1 -0
  60. package/dist/docs/componentes/alert.doc.d.ts +8 -0
  61. package/dist/docs/componentes/alert.doc.d.ts.map +1 -0
  62. package/dist/docs/componentes/autocomplete.doc.d.ts +8 -0
  63. package/dist/docs/componentes/autocomplete.doc.d.ts.map +1 -0
  64. package/dist/docs/componentes/badge.doc.d.ts +8 -0
  65. package/dist/docs/componentes/badge.doc.d.ts.map +1 -0
  66. package/dist/docs/componentes/button.doc.d.ts +8 -0
  67. package/dist/docs/componentes/button.doc.d.ts.map +1 -0
  68. package/dist/docs/componentes/calendar.doc.d.ts +8 -0
  69. package/dist/docs/componentes/calendar.doc.d.ts.map +1 -0
  70. package/dist/docs/componentes/checkbox.doc.d.ts +8 -0
  71. package/dist/docs/componentes/checkbox.doc.d.ts.map +1 -0
  72. package/dist/docs/componentes/datepicker.doc.d.ts +8 -0
  73. package/dist/docs/componentes/datepicker.doc.d.ts.map +1 -0
  74. package/dist/docs/componentes/dialog.doc.d.ts +8 -0
  75. package/dist/docs/componentes/dialog.doc.d.ts.map +1 -0
  76. package/dist/docs/componentes/drawer.doc.d.ts +8 -0
  77. package/dist/docs/componentes/drawer.doc.d.ts.map +1 -0
  78. package/dist/docs/componentes/dropdown.doc.d.ts +8 -0
  79. package/dist/docs/componentes/dropdown.doc.d.ts.map +1 -0
  80. package/dist/docs/componentes/floatlabel.doc.d.ts +8 -0
  81. package/dist/docs/componentes/floatlabel.doc.d.ts.map +1 -0
  82. package/dist/docs/componentes/index.d.ts +10 -0
  83. package/dist/docs/componentes/index.d.ts.map +1 -0
  84. package/dist/docs/componentes/input.doc.d.ts +8 -0
  85. package/dist/docs/componentes/input.doc.d.ts.map +1 -0
  86. package/dist/docs/componentes/knob.doc.d.ts +8 -0
  87. package/dist/docs/componentes/knob.doc.d.ts.map +1 -0
  88. package/dist/docs/componentes/multiselect.doc.d.ts +8 -0
  89. package/dist/docs/componentes/multiselect.doc.d.ts.map +1 -0
  90. package/dist/docs/componentes/orderlist.doc.d.ts +8 -0
  91. package/dist/docs/componentes/orderlist.doc.d.ts.map +1 -0
  92. package/dist/docs/componentes/pagination.doc.d.ts +8 -0
  93. package/dist/docs/componentes/pagination.doc.d.ts.map +1 -0
  94. package/dist/docs/componentes/picklist.doc.d.ts +8 -0
  95. package/dist/docs/componentes/picklist.doc.d.ts.map +1 -0
  96. package/dist/docs/componentes/progress.doc.d.ts +8 -0
  97. package/dist/docs/componentes/progress.doc.d.ts.map +1 -0
  98. package/dist/docs/componentes/radio.doc.d.ts +8 -0
  99. package/dist/docs/componentes/radio.doc.d.ts.map +1 -0
  100. package/dist/docs/componentes/select.doc.d.ts +8 -0
  101. package/dist/docs/componentes/select.doc.d.ts.map +1 -0
  102. package/dist/docs/componentes/skeleton.doc.d.ts +8 -0
  103. package/dist/docs/componentes/skeleton.doc.d.ts.map +1 -0
  104. package/dist/docs/componentes/spinner.doc.d.ts +8 -0
  105. package/dist/docs/componentes/spinner.doc.d.ts.map +1 -0
  106. package/dist/docs/componentes/switch.doc.d.ts +8 -0
  107. package/dist/docs/componentes/switch.doc.d.ts.map +1 -0
  108. package/dist/docs/componentes/table.doc.d.ts +8 -0
  109. package/dist/docs/componentes/table.doc.d.ts.map +1 -0
  110. package/dist/docs/componentes/tabs.doc.d.ts +8 -0
  111. package/dist/docs/componentes/tabs.doc.d.ts.map +1 -0
  112. package/dist/docs/componentes/textarea.doc.d.ts +8 -0
  113. package/dist/docs/componentes/textarea.doc.d.ts.map +1 -0
  114. package/dist/docs/componentes/toast.doc.d.ts +8 -0
  115. package/dist/docs/componentes/toast.doc.d.ts.map +1 -0
  116. package/dist/docs/componentes/tooltip.doc.d.ts +25 -0
  117. package/dist/docs/componentes/tooltip.doc.d.ts.map +1 -0
  118. package/dist/docs/shared.d.ts +9 -0
  119. package/dist/docs/shared.d.ts.map +1 -0
  120. package/dist/docs/types.d.ts +47 -0
  121. package/dist/docs/types.d.ts.map +1 -0
  122. package/dist/fenix-ui.umd.min.js +815 -157
  123. package/dist/fenix-ui2.esm.js +2522 -103
  124. package/dist/fenix-ui2.esm.js.map +1 -1
  125. package/dist/index.d.ts +4 -0
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +16 -0
  128. package/dist/index.js.map +1 -1
  129. package/package.json +212 -187
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picklist.js","sources":["../../../src/components/picklist/picklist.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\r\nimport { css } from '../../core/css';\r\nimport { defineElement } from '../../core/define';\r\n\r\nexport interface PickListItem {\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * <fx-picklist> - Componente para transferir itens entre duas listas.\r\n *\r\n * Permite mover itens entre uma lista de origem e uma lista de destino.\r\n * Suporta filtro, seleção múltipla, checkbox e templates customizados.\r\n *\r\n * Atributos: source, target, source-key, target-key, filter, filter-by,\r\n * filter-placeholder, dragdrop, striped, selection-mode, source-label, target-label.\r\n * Evento: `move-to-target` (composed, detail: { items }).\r\n * Evento: `move-to-source` (composed, detail: { items }).\r\n * Evento: `selection-change-source` (composed, detail: { selection }).\r\n * Evento: `selection-change-target` (composed, detail: { selection }).\r\n */\r\nexport class FxPickList extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n --picklist-primary: var(--fx-color-primary, #3b82f6);\r\n --picklist-border: var(--fx-border-default, #e2e8f0);\r\n --picklist-bg: var(--fx-surface-background, #ffffff);\r\n --picklist-bg-hover: var(--fx-surface-surface-hover, #f1f5f9);\r\n --picklist-text: var(--fx-text-default, #1e293b);\r\n --picklist-text-muted: var(--fx-text-muted, #64748b);\r\n --picklist-radius: var(--fx-radius-md, 8px);\r\n --picklist-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n --picklist-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n }\r\n * { box-sizing: border-box; }\r\n .container {\r\n display: flex;\r\n gap: var(--fx-space-sm, 8px);\r\n align-items: stretch;\r\n }\r\n .list-container {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--fx-space-sm, 8px);\r\n min-width: 0;\r\n }\r\n .list-label {\r\n font-weight: 600;\r\n color: var(--picklist-text);\r\n font-size: calc(var(--fx-font-size) - 1px);\r\n }\r\n .select-all-bar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px);\r\n background: linear-gradient(135deg, var(--picklist-bg), var(--picklist-bg-hover));\r\n border: 1px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n font-size: 0.9em;\r\n font-weight: 500;\r\n }\r\n .select-all-bar label {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fx-space-sm, 10px);\r\n cursor: pointer;\r\n user-select: none;\r\n color: var(--picklist-text);\r\n }\r\n .select-all-bar input[type=\"checkbox\"] {\r\n width: 18px;\r\n height: 18px;\r\n accent-color: var(--picklist-primary);\r\n cursor: pointer;\r\n }\r\n .selection-count {\r\n font-size: 0.85em;\r\n color: var(--picklist-primary);\r\n background: color-mix(in srgb, var(--picklist-primary) 12%, transparent);\r\n padding: 4px 12px;\r\n border-radius: 20px;\r\n font-weight: 600;\r\n }\r\n .controls {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n justify-content: center;\r\n padding: var(--fx-space-xs, 6px);\r\n background: var(--picklist-bg);\r\n border: 1px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n box-shadow: var(--picklist-shadow);\r\n height: fit-content;\r\n position: sticky;\r\n top: 0;\r\n align-self: center;\r\n }\r\n .control-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 3px;\r\n }\r\n .control-group + .control-group {\r\n margin-top: 4px;\r\n padding-top: 6px;\r\n border-top: 1px solid var(--picklist-border);\r\n }\r\n .list-wrapper {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--fx-space-sm, 8px);\r\n }\r\n .filter-wrapper {\r\n margin-bottom: var(--fx-space-xs, 4px);\r\n }\r\n .filter-input {\r\n width: 100%;\r\n box-sizing: border-box;\r\n padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px);\r\n padding-left: 42px;\r\n border: 1.5px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n font-family: inherit;\r\n font-size: inherit;\r\n color: var(--picklist-text);\r\n background: var(--picklist-bg) url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\") no-repeat 14px center;\r\n transition: var(--picklist-transition);\r\n }\r\n .filter-input:focus {\r\n outline: none;\r\n border-color: var(--picklist-primary);\r\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--picklist-primary) 20%, transparent);\r\n }\r\n .filter-input::placeholder {\r\n color: var(--picklist-text-muted);\r\n }\r\n .list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n border: 1px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n overflow: hidden;\r\n box-shadow: var(--picklist-shadow);\r\n min-height: 200px;\r\n max-height: 450px;\r\n overflow-y: auto;\r\n flex: 1;\r\n }\r\n .list::-webkit-scrollbar { width: 6px; }\r\n .list::-webkit-scrollbar-track { background: transparent; }\r\n .list::-webkit-scrollbar-thumb { background: var(--picklist-border); border-radius: 3px; }\r\n .list::-webkit-scrollbar-thumb:hover { background: var(--picklist-text-muted); }\r\n :host([striped]) .list-item:nth-child(even) {\r\n background: var(--fx-surface-surface, #f8fafc);\r\n }\r\n .list-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fx-space-sm, 10px);\r\n padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px);\r\n background: var(--picklist-bg);\r\n border-bottom: 1px solid var(--picklist-border);\r\n cursor: pointer;\r\n user-select: none;\r\n transition: var(--picklist-transition);\r\n }\r\n .list-item:last-child { border-bottom: none; }\r\n .list-item:hover { background: var(--picklist-bg-hover); }\r\n .list-item.selected {\r\n background: color-mix(in srgb, var(--picklist-primary) 8%, transparent);\r\n border-left: 3px solid var(--picklist-primary);\r\n padding-left: 11px;\r\n }\r\n .list-item:focus-visible {\r\n outline: none;\r\n background: color-mix(in srgb, var(--picklist-primary) 15%, transparent);\r\n }\r\n .checkbox {\r\n flex-shrink: 0;\r\n width: 18px;\r\n height: 18px;\r\n accent-color: var(--picklist-primary);\r\n cursor: pointer;\r\n transition: var(--picklist-transition);\r\n }\r\n .checkbox:hover { transform: scale(1.1); }\r\n .item-content {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n .empty-message {\r\n padding: var(--fx-space-xl, 32px);\r\n text-align: center;\r\n color: var(--picklist-text-muted);\r\n font-style: italic;\r\n }\r\n button.control-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 42px;\r\n height: 38px;\r\n padding: 0;\r\n border: none;\r\n border-radius: 8px;\r\n background: transparent;\r\n color: var(--picklist-text-muted);\r\n cursor: pointer;\r\n font-size: 16px;\r\n line-height: 1;\r\n transition: var(--picklist-transition);\r\n position: relative;\r\n }\r\n button.control-btn:hover:not(:disabled) {\r\n background: var(--picklist-bg-hover);\r\n color: var(--picklist-primary);\r\n transform: scale(1.1);\r\n }\r\n button.control-btn:active:not(:disabled) {\r\n transform: scale(0.92);\r\n background: color-mix(in srgb, var(--picklist-primary) 15%, transparent);\r\n }\r\n button.control-btn:focus-visible {\r\n outline: none;\r\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--picklist-primary) 30%, transparent);\r\n }\r\n button.control-btn:disabled {\r\n opacity: 0.3;\r\n cursor: not-allowed;\r\n transform: none;\r\n }\r\n .control-btn-icon { font-size: 18px; line-height: 1; }\r\n\r\n button.control-btn:hover::after {\r\n opacity: 1;\r\n transform: translateX(-50%) translateY(0);\r\n }\r\n @media (max-width: 640px) {\r\n .container { flex-direction: column; }\r\n .controls {\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n position: relative;\r\n }\r\n .control-group { flex-direction: row; }\r\n .control-group + .control-group {\r\n margin-top: 0;\r\n margin-left: 4px;\r\n padding-top: 0;\r\n padding-left: 4px;\r\n border-top: none;\r\n border-left: 1px solid var(--picklist-border);\r\n }\r\n button.control-btn { width: 44px; height: 40px; }\r\n button.control-btn::after { display: none; }\r\n .list { max-height: 300px; min-height: 150px; }\r\n }\r\n @keyframes slideIn {\r\n from { opacity: 0; transform: translateX(-10px); }\r\n to { opacity: 1; transform: translateX(0); }\r\n }\r\n .list-item { animation: slideIn 0.2s ease-out; }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return [\r\n 'source',\r\n 'target',\r\n 'source-key',\r\n 'target-key',\r\n 'filter',\r\n 'filter-by',\r\n 'filter-placeholder',\r\n 'dragdrop',\r\n 'striped',\r\n 'selection-mode',\r\n 'show-select-all',\r\n 'source-label',\r\n 'target-label',\r\n ];\r\n }\r\n\r\n set source(value: PickListItem[]) {\r\n this._source = value;\r\n this._filteredSource = null;\r\n this.render();\r\n }\r\n get source(): PickListItem[] {\r\n return this._source;\r\n }\r\n private _source: PickListItem[] = [];\r\n private _filteredSource: PickListItem[] | null = null;\r\n\r\n set target(value: PickListItem[]) {\r\n this._target = value;\r\n this._filteredTarget = null;\r\n this.render();\r\n }\r\n get target(): PickListItem[] {\r\n return this._target;\r\n }\r\n private _target: PickListItem[] = [];\r\n private _filteredTarget: PickListItem[] | null = null;\r\n\r\n set sourceSelection(value: PickListItem[]) {\r\n this._sourceSelection = value;\r\n this.render();\r\n }\r\n get sourceSelection(): PickListItem[] {\r\n return this._sourceSelection;\r\n }\r\n private _sourceSelection: PickListItem[] = [];\r\n\r\n set targetSelection(value: PickListItem[]) {\r\n this._targetSelection = value;\r\n this.render();\r\n }\r\n get targetSelection(): PickListItem[] {\r\n return this._targetSelection;\r\n }\r\n private _targetSelection: PickListItem[] = [];\r\n\r\n get sourceKey(): string {\r\n return this.getAttr('source-key', '');\r\n }\r\n set sourceKey(v: string) {\r\n this.setAttribute('source-key', v);\r\n }\r\n\r\n get targetKey(): string {\r\n return this.getAttr('target-key', '');\r\n }\r\n set targetKey(v: string) {\r\n this.setAttribute('target-key', v);\r\n }\r\n\r\n get filter(): boolean {\r\n return this.hasAttr('filter');\r\n }\r\n set filter(v: boolean) {\r\n this.toggleAttr('filter', v);\r\n }\r\n\r\n get filterBy(): string {\r\n return this.getAttr('filter-by', 'label');\r\n }\r\n set filterBy(v: string) {\r\n this.setAttribute('filter-by', v);\r\n }\r\n\r\n get filterPlaceholder(): string {\r\n return this.getAttr('filter-placeholder', 'Buscar...');\r\n }\r\n set filterPlaceholder(v: string) {\r\n this.setAttribute('filter-placeholder', v);\r\n }\r\n\r\n get dragdrop(): boolean {\r\n return this.hasAttr('dragdrop');\r\n }\r\n set dragdrop(v: boolean) {\r\n this.toggleAttr('dragdrop', v);\r\n }\r\n\r\n get striped(): boolean {\r\n return this.hasAttr('striped');\r\n }\r\n set striped(v: boolean) {\r\n this.toggleAttr('striped', v);\r\n }\r\n\r\n get selectionMode(): string {\r\n const s = this.getAttr('selection-mode', '');\r\n return s === 'single' || s === 'multiple' ? s : '';\r\n }\r\n set selectionMode(v: string) {\r\n this.setAttribute('selection-mode', v);\r\n }\r\n\r\n get showSelectAll(): boolean {\r\n return this.hasAttr('show-select-all');\r\n }\r\n set showSelectAll(v: boolean) {\r\n this.toggleAttr('show-select-all', v);\r\n }\r\n\r\n get sourceLabel(): string {\r\n return this.getAttr('source-label', 'Disponíveis');\r\n }\r\n set sourceLabel(v: string) {\r\n this.setAttribute('source-label', v);\r\n }\r\n\r\n get targetLabel(): string {\r\n return this.getAttr('target-label', 'Selecionados');\r\n }\r\n set targetLabel(v: string) {\r\n this.setAttribute('target-label', v);\r\n }\r\n\r\n get sourceFilterValue(): string {\r\n return this._sourceFilterValue;\r\n }\r\n set sourceFilterValue(v: string) {\r\n this._sourceFilterValue = v;\r\n this._applySourceFilter();\r\n this._updateListDisplay();\r\n }\r\n private _sourceFilterValue = '';\r\n\r\n get targetFilterValue(): string {\r\n return this._targetFilterValue;\r\n }\r\n set targetFilterValue(v: string) {\r\n this._targetFilterValue = v;\r\n this._applyTargetFilter();\r\n this._updateListDisplay();\r\n }\r\n private _targetFilterValue = '';\r\n private _filterListenersAttached = false;\r\n\r\n private _optionTemplate: ((item: PickListItem) => string) | null = null;\r\n\r\n setOptionTemplate(template: (item: PickListItem) => string): void {\r\n this._optionTemplate = template;\r\n this.render();\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n this._parseSourceAttribute();\r\n this._parseTargetAttribute();\r\n super.connectedCallback();\r\n }\r\n\r\n protected override attributeChangedCallback(): void {\r\n if (this.getAttr('source', '') !== '') {\r\n this._parseSourceAttribute();\r\n }\r\n if (this.getAttr('target', '') !== '') {\r\n this._parseTargetAttribute();\r\n }\r\n super.attributeChangedCallback();\r\n }\r\n\r\n private _parseSourceAttribute(): void {\r\n const dataAttr = this.getAttr('source', '');\r\n if (dataAttr) {\r\n try {\r\n this._source = JSON.parse(dataAttr);\r\n this._filteredSource = null;\r\n } catch {\r\n this._source = [];\r\n }\r\n }\r\n }\r\n\r\n private _parseTargetAttribute(): void {\r\n const dataAttr = this.getAttr('target', '');\r\n if (dataAttr) {\r\n try {\r\n this._target = JSON.parse(dataAttr);\r\n this._filteredTarget = null;\r\n } catch {\r\n this._target = [];\r\n }\r\n }\r\n }\r\n\r\n private _applySourceFilter(): void {\r\n if (!this._sourceFilterValue) {\r\n this._filteredSource = null;\r\n return;\r\n }\r\n const filterFields = this.filterBy.split(',').map(f => f.trim());\r\n this._filteredSource = this._source.filter(item => {\r\n return filterFields.some(field => {\r\n const value = item[field];\r\n if (value == null) return false;\r\n return String(value).toLowerCase().includes(this._sourceFilterValue.toLowerCase());\r\n });\r\n });\r\n }\r\n\r\n private _applyTargetFilter(): void {\r\n if (!this._targetFilterValue) {\r\n this._filteredTarget = null;\r\n return;\r\n }\r\n const filterFields = this.filterBy.split(',').map(f => f.trim());\r\n this._filteredTarget = this._target.filter(item => {\r\n return filterFields.some(field => {\r\n const value = item[field];\r\n if (value == null) return false;\r\n return String(value).toLowerCase().includes(this._targetFilterValue.toLowerCase());\r\n });\r\n });\r\n }\r\n\r\n private _getDisplaySource(): PickListItem[] {\r\n return this._filteredSource || this._source;\r\n }\r\n\r\n private _getDisplayTarget(): PickListItem[] {\r\n return this._filteredTarget || this._target;\r\n }\r\n\r\n private _getItemKey(item: PickListItem, index: number, isSource: boolean): string {\r\n const keyField = isSource ? this.sourceKey : this.targetKey;\r\n if (keyField && item[keyField] != null) {\r\n return String(item[keyField]);\r\n }\r\n if (item['id'] != null) return String(item['id']);\r\n if (item['key'] != null) return String(item['key']);\r\n if (item['label'] != null) return String(item['label']);\r\n if (item['name'] != null) return String(item['name']);\r\n if (item['value'] != null) return String(item['value']);\r\n return String(index);\r\n }\r\n\r\n private _getItemLabel(item: PickListItem): string {\r\n const fields = ['label', 'name', 'title', 'text', 'value'];\r\n for (const field of fields) {\r\n if (item[field] != null) {\r\n return String(item[field]);\r\n }\r\n }\r\n return JSON.stringify(item);\r\n }\r\n\r\n private _isSourceSelected(item: PickListItem, index: number): boolean {\r\n return this._sourceSelection.some(s => this._getItemKey(s, -1, true) === this._getItemKey(item, index, true));\r\n }\r\n\r\n private _isTargetSelected(item: PickListItem, index: number): boolean {\r\n return this._targetSelection.some(s => this._getItemKey(s, -1, false) === this._getItemKey(item, index, false));\r\n }\r\n\r\n private _emitMoveToTarget(): void {\r\n this.dispatchEvent(new CustomEvent('move-to-target', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { items: [...this._sourceSelection], source: [...this._source], target: [...this._target] },\r\n }));\r\n }\r\n\r\n private _emitMoveToSource(): void {\r\n this.dispatchEvent(new CustomEvent('move-to-source', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { items: [...this._targetSelection], source: [...this._source], target: [...this._target] },\r\n }));\r\n }\r\n\r\n private _emitSelectionChangeSource(): void {\r\n this.dispatchEvent(new CustomEvent('selection-change-source', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { selection: [...this._sourceSelection] },\r\n }));\r\n }\r\n\r\n private _emitSelectionChangeTarget(): void {\r\n this.dispatchEvent(new CustomEvent('selection-change-target', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { selection: [...this._targetSelection] },\r\n }));\r\n }\r\n\r\n protected override render(): void {\r\n const dSrc = this._getDisplaySource();\r\n const dTgt = this._getDisplayTarget();\r\n const hasSel = this.selectionMode;\r\n const showAll = hasSel === 'multiple' && this.showSelectAll;\r\n const srcItems = dSrc.length === 0 ? `<li class=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum item'}</li>` : dSrc.map((item, i) => `<li class=\"list-item${this._isSourceSelected(item, i) ? ' selected' : ''}\" data-index=\"${i}\" data-list=\"source\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\"' + (this._isSourceSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n const tgtItems = dTgt.length === 0 ? `<li class=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum selecionado'}</li>` : dTgt.map((item, i) => `<li class=\"list-item${this._isTargetSelected(item, i) ? ' selected' : ''}\" data-index=\"${i}\" data-list=\"target\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\"' + (this._isTargetSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n const srcAllBar = showAll ? `<div class=\"select-all-bar\" part=\"select-all-bar\"><label><input type=\"checkbox\" class=\"select-all-checkbox\" data-list=\"source\" ${this._sourceSelection.length > 0 && this._sourceSelection.length === this._source.length ? 'checked' : ''} aria-label=\"Selecionar todos da origem\" /> Selecionar Todos</label><span class=\"selection-count\">${this._sourceSelection.length} selecionado(s)</span></div>` : '';\r\n const tgtAllBar = showAll ? `<div class=\"select-all-bar\" part=\"select-all-bar\"><label><input type=\"checkbox\" class=\"select-all-checkbox\" data-list=\"target\" ${this._targetSelection.length > 0 && this._targetSelection.length === this._target.length ? 'checked' : ''} aria-label=\"Selecionar todos do destino\" /> Selecionar Todos</label><span class=\"selection-count\">${this._targetSelection.length} selecionado(s)</span></div>` : '';\r\n\r\n this.setTemplate(`<div class=\"container\"><div class=\"list-container\"><div class=\"list-label\">${esc(this.sourceLabel)} (${this._source.length})</div>${this.filter ? '<div class=\"filter-wrapper\"><input type=\"text\" class=\"filter-input source-filter\" placeholder=\"' + this.filterPlaceholder + '\" value=\"' + esc(this._sourceFilterValue) + '\" /></div>' : ''}${srcAllBar}<div class=\"list-wrapper\"><ul class=\"list source-list\" role=\"listbox\" tabindex=\"0\">${srcItems}</ul></div></div><div class=\"controls\"><div class=\"control-group\"><button class=\"control-btn\" data-action=\"move-all-target\" part=\"control-btn\" aria-label=\"Mover todos para destino\"><span class=\"control-btn-icon\">»</span></button><button class=\"control-btn\" data-action=\"move-target\" part=\"control-btn\" aria-label=\"Mover para destino\"><span class=\"control-btn-icon\">→</span></button></div><div class=\"control-group\"><button class=\"control-btn\" data-action=\"move-source\" part=\"control-btn\" aria-label=\"Mover para origem\"><span class=\"control-btn-icon\">←</span></button><button class=\"control-btn\" data-action=\"move-all-source\" part=\"control-btn\" aria-label=\"Mover todos para origem\"><span class=\"control-btn-icon\">«</span></button></div></div><div class=\"list-container\"><div class=\"list-label\">${esc(this.targetLabel)} (${this._target.length})</div>${this.filter ? '<div class=\"filter-wrapper\"><input type=\"text\" class=\"filter-input target-filter\" placeholder=\"' + this.filterPlaceholder + '\" value=\"' + esc(this._targetFilterValue) + '\" /></div>' : ''}${tgtAllBar}<div class=\"list-wrapper\"><ul class=\"list target-list\" role=\"listbox\" tabindex=\"0\">${tgtItems}</ul></div></div></div>`);\r\n\r\n this._attachListeners();\r\n }\r\n\r\n private _attachListeners(): void {\r\n // Listeners delegados no root, anexados uma unica vez (sobrevivem a re-renders)\r\n if (!this._filterListenersAttached) {\r\n this._filterListenersAttached = true;\r\n\r\n this.root.addEventListener('input', (e) => {\r\n const t = e.target as HTMLElement;\r\n if (t.classList.contains('select-all-checkbox')) {\r\n this._handleSelectAll(t as HTMLInputElement);\r\n return;\r\n }\r\n if (t.classList.contains('source-filter')) {\r\n this.sourceFilterValue = (t as HTMLInputElement).value;\r\n } else if (t.classList.contains('target-filter')) {\r\n this.targetFilterValue = (t as HTMLInputElement).value;\r\n }\r\n });\r\n\r\n this.root.addEventListener('click', (e) => {\r\n const t = e.target as HTMLElement;\r\n const btn = t.closest('.control-btn') as HTMLButtonElement | null;\r\n if (btn) {\r\n switch (btn.dataset.action) {\r\n case 'move-target': this._moveToTarget(); break;\r\n case 'move-all-target': this._moveAllToTarget(); break;\r\n case 'move-source': this._moveToSource(); break;\r\n case 'move-all-source': this._moveAllToSource(); break;\r\n }\r\n return;\r\n }\r\n const el = t.closest('.list-item') as HTMLElement | null;\r\n if (!el) return;\r\n const isSrc = el.dataset.list === 'source';\r\n const idx = Number(el.dataset.index);\r\n const item = (isSrc ? this._getDisplaySource() : this._getDisplayTarget())[idx];\r\n if (isSrc) this._toggleSourceSelection(item, idx); else this._toggleTargetSelection(item, idx);\r\n });\r\n }\r\n this._updateControlsState();\r\n }\r\n\r\n private _handleSelectAll(checkbox: HTMLInputElement): void {\r\n const isSrc = checkbox.dataset.list === 'source';\r\n if (isSrc) {\r\n this._sourceSelection = checkbox.checked ? [...this._getDisplaySource()] : [];\r\n this._emitSelectionChangeSource();\r\n } else {\r\n this._targetSelection = checkbox.checked ? [...this._getDisplayTarget()] : [];\r\n this._emitSelectionChangeTarget();\r\n }\r\n this._updateSelectionDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n /**\r\n * Atualiza a selecao visual in-place (classes e checkboxes dos itens existentes),\r\n * sem recriar o DOM — mantendo referencias de elementos validas durante cliques.\r\n */\r\n private _updateSelectionDisplay(): void {\r\n const updateList = (listSel: HTMLElement | null, isSelFn: (item: PickListItem, i: number) => boolean, getData: () => PickListItem[]): void => {\r\n if (!listSel) return;\r\n listSel.querySelectorAll<HTMLElement>('.list-item').forEach(el => {\r\n const idx = Number(el.dataset.index);\r\n const selected = isSelFn(getData()[idx], idx);\r\n el.classList.toggle('selected', selected);\r\n el.setAttribute('aria-selected', String(selected));\r\n const cb = el.querySelector<HTMLInputElement>('.checkbox');\r\n if (cb) cb.checked = selected;\r\n });\r\n };\r\n updateList(this.root.querySelector('.source-list'), (it, i) => this._isSourceSelected(it, i), () => this._getDisplaySource());\r\n updateList(this.root.querySelector('.target-list'), (it, i) => this._isTargetSelected(it, i), () => this._getDisplayTarget());\r\n this._updateSelectAllBars();\r\n }\r\n\r\n /** Sincroniza as barras \"Selecionar Todos\" (checkbox + contador) sem re-render completo. */\r\n private _updateSelectAllBars(): void {\r\n if (!(this.selectionMode === 'multiple' && this.showSelectAll)) return;\r\n const bars = [\r\n { el: this.root.querySelector<HTMLInputElement>('.select-all-checkbox[data-list=\"source\"]'), total: this._source.length, sel: this._sourceSelection.length },\r\n { el: this.root.querySelector<HTMLInputElement>('.select-all-checkbox[data-list=\"target\"]'), total: this._target.length, sel: this._targetSelection.length },\r\n ];\r\n bars.forEach(({ el, total, sel }) => {\r\n if (!el) return;\r\n el.checked = total > 0 && sel === total;\r\n const count = el.closest('.select-all-bar')?.querySelector('.selection-count');\r\n if (count) count.textContent = `${sel} selecionado(s)`;\r\n });\r\n }\r\n\r\n private _updateControlsState(): void {\r\n this.root.querySelectorAll<HTMLButtonElement>('.control-btn').forEach(btn => {\r\n const a = btn.dataset.action;\r\n btn.disabled = (a === 'move-target' && this._sourceSelection.length === 0) || (a === 'move-all-target' && this._source.length === 0) || (a === 'move-source' && this._targetSelection.length === 0) || (a === 'move-all-source' && this._target.length === 0);\r\n });\r\n }\r\n\r\n private _moveToTarget(): void {\r\n if (!this._sourceSelection.length) return;\r\n const items = [...this._sourceSelection];\r\n this._source = this._source.filter(s => !items.some(i => this._getItemKey(i, -1, true) === this._getItemKey(s, -1, true)));\r\n this._target = [...this._target, ...items];\r\n this._sourceSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToTarget();\r\n }\r\n\r\n private _moveToSource(): void {\r\n if (!this._targetSelection.length) return;\r\n const items = [...this._targetSelection];\r\n this._target = this._target.filter(t => !items.some(i => this._getItemKey(i, -1, false) === this._getItemKey(t, -1, false)));\r\n this._source = [...this._source, ...items];\r\n this._targetSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToSource();\r\n }\r\n\r\n private _moveAllToTarget(): void {\r\n const items = [...this._source];\r\n this._source = [];\r\n this._target = [...this._target, ...items];\r\n this._sourceSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToTarget();\r\n }\r\n\r\n private _moveAllToSource(): void {\r\n const items = [...this._target];\r\n this._target = [];\r\n this._source = [...this._source, ...items];\r\n this._targetSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToSource();\r\n }\r\n\r\n private _toggleSourceSelection(item: PickListItem, index: number): void {\r\n // Sem selection-mode definido, permite selecao simples (um item por vez)\r\n const mode = this.selectionMode || 'single';\r\n const key = this._getItemKey(item, index, true);\r\n const idx = this._sourceSelection.findIndex(s => this._getItemKey(s, -1, true) === key);\r\n if (idx >= 0) {\r\n this._sourceSelection.splice(idx, 1);\r\n } else if (mode === 'multiple') {\r\n this._sourceSelection.push(item);\r\n } else {\r\n this._sourceSelection = [item];\r\n }\r\n this._emitSelectionChangeSource();\r\n this._updateSelectionDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _toggleTargetSelection(item: PickListItem, index: number): void {\r\n // Sem selection-mode definido, permite selecao simples (um item por vez)\r\n const mode = this.selectionMode || 'single';\r\n const key = this._getItemKey(item, index, false);\r\n const idx = this._targetSelection.findIndex(s => this._getItemKey(s, -1, false) === key);\r\n if (idx >= 0) {\r\n this._targetSelection.splice(idx, 1);\r\n } else if (mode === 'multiple') {\r\n this._targetSelection.push(item);\r\n } else {\r\n this._targetSelection = [item];\r\n }\r\n this._emitSelectionChangeTarget();\r\n this._updateSelectionDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _updateListDisplay(): void {\r\n const srcWrapper = this.root.querySelector('.source-list')?.parentElement;\r\n const tgtWrapper = this.root.querySelector('.target-list')?.parentElement;\r\n const srcLabel = this.root.querySelector('.list-container:first-of-type .list-label');\r\n const tgtLabel = this.root.querySelector('.list-container:last-of-type .list-label');\r\n if (!srcWrapper || !tgtWrapper) { this.render(); return; }\r\n const dSrc = this._getDisplaySource();\r\n const dTgt = this._getDisplayTarget();\r\n const hasSel = this.selectionMode;\r\n const srcItems = dSrc.length === 0 ? `<li class=\"empty-message\" part=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum item'}</li>` : dSrc.map((item, i) => `<li class=\"list-item${this._isSourceSelected(item, i) ? ' selected' : ''}\" part=\"list-item\" data-index=\"${i}\" data-list=\"source\" role=\"option\" aria-selected=\"${this._isSourceSelected(item, i)}\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"' + (this._isSourceSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\" part=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n const tgtItems = dTgt.length === 0 ? `<li class=\"empty-message\" part=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum selecionado'}</li>` : dTgt.map((item, i) => `<li class=\"list-item${this._isTargetSelected(item, i) ? ' selected' : ''}\" part=\"list-item\" data-index=\"${i}\" data-list=\"target\" role=\"option\" aria-selected=\"${this._isTargetSelected(item, i)}\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"' + (this._isTargetSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\" part=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n srcWrapper.innerHTML = `<ul class=\"list source-list\" role=\"listbox\" tabindex=\"0\">${srcItems}</ul>`;\r\n tgtWrapper.innerHTML = `<ul class=\"list target-list\" role=\"listbox\" tabindex=\"0\">${tgtItems}</ul>`;\r\n if (srcLabel) srcLabel.textContent = `${this.sourceLabel} (${this._source.length})`;\r\n if (tgtLabel) tgtLabel.textContent = `${this.targetLabel} (${this._target.length})`;\r\n this._updateSelectAllBars();\r\n this._attachListeners();\r\n }\r\n}\r\n\r\nfunction esc(s: string): string {\r\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n}\r\n\r\nexport function defineFxPickList(): typeof FxPickList {\r\n return defineElement('fx-picklist', FxPickList);\r\n}"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Diretiva fx-tooltip — Aplica tooltip em qualquer elemento HTML.
3
+ *
4
+ * Uso:
5
+ * <div fx-tooltip="Texto simples">Div com tooltip</div>
6
+ * <button fx-tooltip="Clique" fx-tooltip-position="bottom">Botão</button>
7
+ * <span fx-tooltip="<strong>HTML</strong>" fx-tooltip-html>Texto</span>
8
+ *
9
+ * Atributos:
10
+ * fx-tooltip — Conteúdo do tooltip (texto ou HTML)
11
+ * fx-tooltip-position — Posição: top | bottom | left | right (padrão: top)
12
+ * fx-tooltip-html — Se presente, trata o conteúdo como HTML
13
+ */
14
+ export interface FxTooltipConfig {
15
+ position: 'top' | 'bottom' | 'left' | 'right';
16
+ html: boolean;
17
+ }
18
+ /**
19
+ * Inicializa a diretiva fx-tooltip.
20
+ * Deve ser chamado uma vez na aplicação.
21
+ *
22
+ * @example
23
+ * import { defineFxTooltipDirective } from '@wrrdev/fenix-ui/tooltip';
24
+ * defineFxTooltipDirective();
25
+ */
26
+ export declare function defineFxTooltipDirective(): void;
27
+ /**
28
+ * Destrói a diretiva fx-tooltip e limpa todos os recursos.
29
+ */
30
+ export declare function destroyFxTooltipDirective(): void;
31
+ //# sourceMappingURL=directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/directive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,IAAI,EAAE,OAAO,CAAC;CACf;AAkTD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,294 @@
1
+ const DEFAULT_CONFIG = {
2
+ position: "top"
3
+ };
4
+ class TooltipBehavior {
5
+ constructor(element) {
6
+ this.tooltipElement = null;
7
+ this.showTimeout = null;
8
+ this.hideTimeout = null;
9
+ this.show = () => {
10
+ if (this.hideTimeout) {
11
+ clearTimeout(this.hideTimeout);
12
+ this.hideTimeout = null;
13
+ }
14
+ this.showTimeout = window.setTimeout(() => {
15
+ if (this.tooltipElement) {
16
+ this.tooltipElement.classList.add("fx-tooltip-visible");
17
+ }
18
+ }, 100);
19
+ };
20
+ this.hide = () => {
21
+ if (this.showTimeout) {
22
+ clearTimeout(this.showTimeout);
23
+ this.showTimeout = null;
24
+ }
25
+ this.hideTimeout = window.setTimeout(() => {
26
+ if (this.tooltipElement) {
27
+ this.tooltipElement.classList.remove("fx-tooltip-visible");
28
+ }
29
+ }, 50);
30
+ };
31
+ this.element = element;
32
+ this.config = this.parseConfig();
33
+ this.init();
34
+ }
35
+ parseConfig() {
36
+ const position = this.element.getAttribute("fx-tooltip-position");
37
+ return {
38
+ position: position && ["top", "bottom", "left", "right"].includes(position) ? position : DEFAULT_CONFIG.position,
39
+ html: this.element.hasAttribute("fx-tooltip-html")
40
+ };
41
+ }
42
+ init() {
43
+ const computedStyle = window.getComputedStyle(this.element);
44
+ if (computedStyle.position === "static") {
45
+ this.element.style.position = "relative";
46
+ }
47
+ this.createTooltipElement();
48
+ this.element.addEventListener("mouseenter", this.show);
49
+ this.element.addEventListener("mouseleave", this.hide);
50
+ this.element.addEventListener("focus", this.show);
51
+ this.element.addEventListener("blur", this.hide);
52
+ }
53
+ createTooltipElement() {
54
+ const content = this.element.getAttribute("fx-tooltip");
55
+ if (!content) return;
56
+ this.tooltipElement = document.createElement("span");
57
+ this.tooltipElement.setAttribute("role", "tooltip");
58
+ this.tooltipElement.setAttribute("data-fx-tooltip", "");
59
+ this.tooltipElement.className = `fx-tooltip-bubble fx-tooltip-${this.config.position}`;
60
+ if (this.config.html) {
61
+ this.tooltipElement.innerHTML = content;
62
+ } else {
63
+ this.tooltipElement.textContent = content;
64
+ }
65
+ this.element.appendChild(this.tooltipElement);
66
+ }
67
+ update() {
68
+ this.config = this.parseConfig();
69
+ if (this.tooltipElement) {
70
+ this.tooltipElement.remove();
71
+ this.tooltipElement = null;
72
+ }
73
+ this.createTooltipElement();
74
+ }
75
+ destroy() {
76
+ this.element.removeEventListener("mouseenter", this.show);
77
+ this.element.removeEventListener("mouseleave", this.hide);
78
+ this.element.removeEventListener("focus", this.show);
79
+ this.element.removeEventListener("blur", this.hide);
80
+ if (this.showTimeout) clearTimeout(this.showTimeout);
81
+ if (this.hideTimeout) clearTimeout(this.hideTimeout);
82
+ if (this.tooltipElement) {
83
+ this.tooltipElement.remove();
84
+ this.tooltipElement = null;
85
+ }
86
+ }
87
+ }
88
+ const _FxTooltipManager = class _FxTooltipManager {
89
+ constructor() {
90
+ this.observer = null;
91
+ this.behaviors = /* @__PURE__ */ new Map();
92
+ this.injectedStyles = null;
93
+ this.injectStyles();
94
+ this.observe();
95
+ this.processExistingElements();
96
+ }
97
+ static getInstance() {
98
+ if (!_FxTooltipManager.instance) {
99
+ _FxTooltipManager.instance = new _FxTooltipManager();
100
+ }
101
+ return _FxTooltipManager.instance;
102
+ }
103
+ injectStyles() {
104
+ if (document.getElementById("fx-tooltip-directive-styles")) return;
105
+ this.injectedStyles = document.createElement("style");
106
+ this.injectedStyles.id = "fx-tooltip-directive-styles";
107
+ this.injectedStyles.textContent = getTooltipStyles();
108
+ document.head.appendChild(this.injectedStyles);
109
+ }
110
+ observe() {
111
+ this.observer = new MutationObserver((mutations) => {
112
+ for (const mutation of mutations) {
113
+ if (mutation.type === "childList") {
114
+ mutation.addedNodes.forEach((node) => {
115
+ if (node instanceof HTMLElement) {
116
+ this.processElement(node);
117
+ node.querySelectorAll("[fx-tooltip]").forEach((el) => this.processElement(el));
118
+ }
119
+ });
120
+ }
121
+ if (mutation.type === "attributes" && mutation.target instanceof HTMLElement) {
122
+ const target = mutation.target;
123
+ if (target.hasAttribute("fx-tooltip")) {
124
+ this.processElement(target);
125
+ } else if (this.behaviors.has(target)) {
126
+ this.removeBehavior(target);
127
+ }
128
+ }
129
+ }
130
+ });
131
+ this.observer.observe(document.body, {
132
+ childList: true,
133
+ subtree: true,
134
+ attributes: true,
135
+ attributeFilter: ["fx-tooltip", "fx-tooltip-position", "fx-tooltip-html"]
136
+ });
137
+ }
138
+ processExistingElements() {
139
+ document.querySelectorAll("[fx-tooltip]").forEach((el) => this.processElement(el));
140
+ }
141
+ processElement(element) {
142
+ if (!element.hasAttribute("fx-tooltip")) {
143
+ this.removeBehavior(element);
144
+ return;
145
+ }
146
+ if (this.behaviors.has(element)) {
147
+ this.behaviors.get(element).update();
148
+ } else {
149
+ this.behaviors.set(element, new TooltipBehavior(element));
150
+ }
151
+ }
152
+ removeBehavior(element) {
153
+ const behavior = this.behaviors.get(element);
154
+ if (behavior) {
155
+ behavior.destroy();
156
+ this.behaviors.delete(element);
157
+ }
158
+ }
159
+ destroy() {
160
+ if (this.observer) {
161
+ this.observer.disconnect();
162
+ this.observer = null;
163
+ }
164
+ this.behaviors.forEach((behavior) => behavior.destroy());
165
+ this.behaviors.clear();
166
+ if (this.injectedStyles) {
167
+ this.injectedStyles.remove();
168
+ this.injectedStyles = null;
169
+ }
170
+ _FxTooltipManager.instance = null;
171
+ }
172
+ };
173
+ _FxTooltipManager.instance = null;
174
+ let FxTooltipManager = _FxTooltipManager;
175
+ function getTooltipStyles() {
176
+ return (
177
+ /* css */
178
+ `
179
+ [fx-tooltip] {
180
+ position: relative;
181
+ }
182
+
183
+ .fx-tooltip-bubble {
184
+ position: absolute;
185
+ background: var(--fx-text-default, #1e293b);
186
+ color: var(--fx-surface-background, #fff);
187
+ font-family: var(--fx-font-family, system-ui, -apple-system, sans-serif);
188
+ font-size: calc(var(--fx-font-size, 14px) - 2px);
189
+ line-height: 1.45;
190
+ padding: var(--fx-space-xs, 4px) var(--fx-space-md, 12px);
191
+ border-radius: var(--fx-radius-sm, 4px);
192
+ box-shadow: var(--fx-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
193
+ width: max-content;
194
+ min-width: 60px;
195
+ max-width: var(--fx-tooltip-max-width, 320px);
196
+ white-space: normal;
197
+ text-align: center;
198
+ opacity: 0;
199
+ visibility: hidden;
200
+ transition: opacity var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease);
201
+ z-index: var(--fx-z-tooltip, 1050);
202
+ pointer-events: none;
203
+ }
204
+
205
+ .fx-tooltip-bubble.fx-tooltip-visible {
206
+ opacity: 1;
207
+ visibility: visible;
208
+ }
209
+
210
+ .fx-tooltip-top {
211
+ bottom: calc(100% + 6px);
212
+ left: 50%;
213
+ transform: translateX(-50%);
214
+ }
215
+ .fx-tooltip-top::after {
216
+ content: '';
217
+ position: absolute;
218
+ top: 100%;
219
+ left: 50%;
220
+ transform: translateX(-50%);
221
+ border: 5px solid transparent;
222
+ border-top-color: var(--fx-text-default, #1e293b);
223
+ }
224
+
225
+ .fx-tooltip-bottom {
226
+ top: calc(100% + 6px);
227
+ left: 50%;
228
+ transform: translateX(-50%);
229
+ bottom: auto;
230
+ }
231
+ .fx-tooltip-bottom::after {
232
+ content: '';
233
+ position: absolute;
234
+ bottom: 100%;
235
+ left: 50%;
236
+ transform: translateX(-50%);
237
+ border: 5px solid transparent;
238
+ border-bottom-color: var(--fx-text-default, #1e293b);
239
+ }
240
+
241
+ .fx-tooltip-left {
242
+ right: calc(100% + 6px);
243
+ top: 50%;
244
+ transform: translateY(-50%);
245
+ left: auto;
246
+ bottom: auto;
247
+ }
248
+ .fx-tooltip-left::after {
249
+ content: '';
250
+ position: absolute;
251
+ top: 50%;
252
+ left: 100%;
253
+ transform: translateY(-50%);
254
+ border: 5px solid transparent;
255
+ border-left-color: var(--fx-text-default, #1e293b);
256
+ }
257
+
258
+ .fx-tooltip-right {
259
+ left: calc(100% + 6px);
260
+ top: 50%;
261
+ transform: translateY(-50%);
262
+ right: auto;
263
+ bottom: auto;
264
+ }
265
+ .fx-tooltip-right::after {
266
+ content: '';
267
+ position: absolute;
268
+ top: 50%;
269
+ right: 100%;
270
+ transform: translateY(-50%);
271
+ border: 5px solid transparent;
272
+ border-right-color: var(--fx-text-default, #1e293b);
273
+ }
274
+ `
275
+ );
276
+ }
277
+ function defineFxTooltipDirective() {
278
+ if (typeof window === "undefined") return;
279
+ if (document.readyState === "loading") {
280
+ document.addEventListener("DOMContentLoaded", () => {
281
+ FxTooltipManager.getInstance();
282
+ });
283
+ } else {
284
+ FxTooltipManager.getInstance();
285
+ }
286
+ }
287
+ function destroyFxTooltipDirective() {
288
+ FxTooltipManager.getInstance().destroy();
289
+ }
290
+ export {
291
+ defineFxTooltipDirective,
292
+ destroyFxTooltipDirective
293
+ };
294
+ //# sourceMappingURL=directive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive.js","sources":["../../../src/components/tooltip/directive.ts"],"sourcesContent":["/**\r\n * Diretiva fx-tooltip — Aplica tooltip em qualquer elemento HTML.\r\n *\r\n * Uso:\r\n * <div fx-tooltip=\"Texto simples\">Div com tooltip</div>\r\n * <button fx-tooltip=\"Clique\" fx-tooltip-position=\"bottom\">Botão</button>\r\n * <span fx-tooltip=\"<strong>HTML</strong>\" fx-tooltip-html>Texto</span>\r\n *\r\n * Atributos:\r\n * fx-tooltip — Conteúdo do tooltip (texto ou HTML)\r\n * fx-tooltip-position — Posição: top | bottom | left | right (padrão: top)\r\n * fx-tooltip-html — Se presente, trata o conteúdo como HTML\r\n */\r\n\r\nexport interface FxTooltipConfig {\r\n position: 'top' | 'bottom' | 'left' | 'right';\r\n html: boolean;\r\n}\r\n\r\nconst DEFAULT_CONFIG: FxTooltipConfig = {\r\n position: 'top',\r\n html: false,\r\n};\r\n\r\n/**\r\n * Classe que gerencia o comportamento de tooltip em um elemento.\r\n */\r\nclass TooltipBehavior {\r\n private element: HTMLElement;\r\n private tooltipElement: HTMLSpanElement | null = null;\r\n private config: FxTooltipConfig;\r\n private showTimeout: number | null = null;\r\n private hideTimeout: number | null = null;\r\n\r\n constructor(element: HTMLElement) {\r\n this.element = element;\r\n this.config = this.parseConfig();\r\n this.init();\r\n }\r\n\r\n private parseConfig(): FxTooltipConfig {\r\n const position = this.element.getAttribute('fx-tooltip-position') as FxTooltipConfig['position'];\r\n return {\r\n position: position && ['top', 'bottom', 'left', 'right'].includes(position) ? position : DEFAULT_CONFIG.position,\r\n html: this.element.hasAttribute('fx-tooltip-html'),\r\n };\r\n }\r\n\r\n private init(): void {\r\n const computedStyle = window.getComputedStyle(this.element);\r\n if (computedStyle.position === 'static') {\r\n this.element.style.position = 'relative';\r\n }\r\n this.createTooltipElement();\r\n this.element.addEventListener('mouseenter', this.show);\r\n this.element.addEventListener('mouseleave', this.hide);\r\n this.element.addEventListener('focus', this.show);\r\n this.element.addEventListener('blur', this.hide);\r\n }\r\n\r\n private createTooltipElement(): void {\r\n const content = this.element.getAttribute('fx-tooltip');\r\n if (!content) return;\r\n this.tooltipElement = document.createElement('span');\r\n this.tooltipElement.setAttribute('role', 'tooltip');\r\n this.tooltipElement.setAttribute('data-fx-tooltip', '');\r\n this.tooltipElement.className = `fx-tooltip-bubble fx-tooltip-${this.config.position}`;\r\n if (this.config.html) {\r\n this.tooltipElement.innerHTML = content;\r\n } else {\r\n this.tooltipElement.textContent = content;\r\n }\r\n this.element.appendChild(this.tooltipElement);\r\n }\r\n\r\n private show = (): void => {\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n this.showTimeout = window.setTimeout(() => {\r\n if (this.tooltipElement) {\r\n this.tooltipElement.classList.add('fx-tooltip-visible');\r\n }\r\n }, 100);\r\n };\r\n\r\n private hide = (): void => {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n this.hideTimeout = window.setTimeout(() => {\r\n if (this.tooltipElement) {\r\n this.tooltipElement.classList.remove('fx-tooltip-visible');\r\n }\r\n }, 50);\r\n };\r\n\r\n public update(): void {\r\n this.config = this.parseConfig();\r\n if (this.tooltipElement) {\r\n this.tooltipElement.remove();\r\n this.tooltipElement = null;\r\n }\r\n this.createTooltipElement();\r\n }\r\n\r\n public destroy(): void {\r\n this.element.removeEventListener('mouseenter', this.show);\r\n this.element.removeEventListener('mouseleave', this.hide);\r\n this.element.removeEventListener('focus', this.show);\r\n this.element.removeEventListener('blur', this.hide);\r\n if (this.showTimeout) clearTimeout(this.showTimeout);\r\n if (this.hideTimeout) clearTimeout(this.hideTimeout);\r\n if (this.tooltipElement) {\r\n this.tooltipElement.remove();\r\n this.tooltipElement = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Gerencia todas as instâncias de tooltip no documento.\r\n */\r\nclass FxTooltipManager {\r\n private static instance: FxTooltipManager | null = null;\r\n private observer: MutationObserver | null = null;\r\n private behaviors: Map<HTMLElement, TooltipBehavior> = new Map();\r\n private injectedStyles: HTMLStyleElement | null = null;\r\n\r\n private constructor() {\r\n this.injectStyles();\r\n this.observe();\r\n this.processExistingElements();\r\n }\r\n\r\n public static getInstance(): FxTooltipManager {\r\n if (!FxTooltipManager.instance) {\r\n FxTooltipManager.instance = new FxTooltipManager();\r\n }\r\n return FxTooltipManager.instance;\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById('fx-tooltip-directive-styles')) return;\r\n this.injectedStyles = document.createElement('style');\r\n this.injectedStyles.id = 'fx-tooltip-directive-styles';\r\n this.injectedStyles.textContent = getTooltipStyles();\r\n document.head.appendChild(this.injectedStyles);\r\n }\r\n\r\n private observe(): void {\r\n this.observer = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type === 'childList') {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node instanceof HTMLElement) {\r\n this.processElement(node);\r\n node.querySelectorAll<HTMLElement>('[fx-tooltip]').forEach((el) => this.processElement(el));\r\n }\r\n });\r\n }\r\n if (mutation.type === 'attributes' && mutation.target instanceof HTMLElement) {\r\n const target = mutation.target;\r\n if (target.hasAttribute('fx-tooltip')) {\r\n this.processElement(target);\r\n } else if (this.behaviors.has(target)) {\r\n this.removeBehavior(target);\r\n }\r\n }\r\n }\r\n });\r\n this.observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: ['fx-tooltip', 'fx-tooltip-position', 'fx-tooltip-html'],\r\n });\r\n }\r\n\r\n private processExistingElements(): void {\r\n document.querySelectorAll<HTMLElement>('[fx-tooltip]').forEach((el) => this.processElement(el));\r\n }\r\n\r\n private processElement(element: HTMLElement): void {\r\n if (!element.hasAttribute('fx-tooltip')) {\r\n this.removeBehavior(element);\r\n return;\r\n }\r\n if (this.behaviors.has(element)) {\r\n this.behaviors.get(element)!.update();\r\n } else {\r\n this.behaviors.set(element, new TooltipBehavior(element));\r\n }\r\n }\r\n\r\n private removeBehavior(element: HTMLElement): void {\r\n const behavior = this.behaviors.get(element);\r\n if (behavior) {\r\n behavior.destroy();\r\n this.behaviors.delete(element);\r\n }\r\n }\r\n\r\n public destroy(): void {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n this.behaviors.forEach((behavior) => behavior.destroy());\r\n this.behaviors.clear();\r\n if (this.injectedStyles) {\r\n this.injectedStyles.remove();\r\n this.injectedStyles = null;\r\n }\r\n FxTooltipManager.instance = null;\r\n }\r\n}\r\n\r\n/**\r\n * Retorna os estilos CSS para os tooltips.\r\n */\r\nfunction getTooltipStyles(): string {\r\n return /* css */ `\r\n [fx-tooltip] {\r\n position: relative;\r\n }\r\n\r\n .fx-tooltip-bubble {\r\n position: absolute;\r\n background: var(--fx-text-default, #1e293b);\r\n color: var(--fx-surface-background, #fff);\r\n font-family: var(--fx-font-family, system-ui, -apple-system, sans-serif);\r\n font-size: calc(var(--fx-font-size, 14px) - 2px);\r\n line-height: 1.45;\r\n padding: var(--fx-space-xs, 4px) var(--fx-space-md, 12px);\r\n border-radius: var(--fx-radius-sm, 4px);\r\n box-shadow: var(--fx-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));\r\n width: max-content;\r\n min-width: 60px;\r\n max-width: var(--fx-tooltip-max-width, 320px);\r\n white-space: normal;\r\n text-align: center;\r\n opacity: 0;\r\n visibility: hidden;\r\n transition: opacity var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease);\r\n z-index: var(--fx-z-tooltip, 1050);\r\n pointer-events: none;\r\n }\r\n\r\n .fx-tooltip-bubble.fx-tooltip-visible {\r\n opacity: 1;\r\n visibility: visible;\r\n }\r\n\r\n .fx-tooltip-top {\r\n bottom: calc(100% + 6px);\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n .fx-tooltip-top::after {\r\n content: '';\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n border: 5px solid transparent;\r\n border-top-color: var(--fx-text-default, #1e293b);\r\n }\r\n\r\n .fx-tooltip-bottom {\r\n top: calc(100% + 6px);\r\n left: 50%;\r\n transform: translateX(-50%);\r\n bottom: auto;\r\n }\r\n .fx-tooltip-bottom::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 100%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n border: 5px solid transparent;\r\n border-bottom-color: var(--fx-text-default, #1e293b);\r\n }\r\n\r\n .fx-tooltip-left {\r\n right: calc(100% + 6px);\r\n top: 50%;\r\n transform: translateY(-50%);\r\n left: auto;\r\n bottom: auto;\r\n }\r\n .fx-tooltip-left::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 100%;\r\n transform: translateY(-50%);\r\n border: 5px solid transparent;\r\n border-left-color: var(--fx-text-default, #1e293b);\r\n }\r\n\r\n .fx-tooltip-right {\r\n left: calc(100% + 6px);\r\n top: 50%;\r\n transform: translateY(-50%);\r\n right: auto;\r\n bottom: auto;\r\n }\r\n .fx-tooltip-right::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n right: 100%;\r\n transform: translateY(-50%);\r\n border: 5px solid transparent;\r\n border-right-color: var(--fx-text-default, #1e293b);\r\n }\r\n `;\r\n}\r\n\r\n/**\r\n * Inicializa a diretiva fx-tooltip.\r\n * Deve ser chamado uma vez na aplicação.\r\n *\r\n * @example\r\n * import { defineFxTooltipDirective } from '@wrrdev/fenix-ui/tooltip';\r\n * defineFxTooltipDirective();\r\n */\r\nexport function defineFxTooltipDirective(): void {\r\n if (typeof window === 'undefined') return;\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n FxTooltipManager.getInstance();\r\n });\r\n } else {\r\n FxTooltipManager.getInstance();\r\n }\r\n}\r\n\r\n/**\r\n * Destrói a diretiva fx-tooltip e limpa todos os recursos.\r\n */\r\nexport function destroyFxTooltipDirective(): void {\r\n FxTooltipManager.getInstance().destroy();\r\n}\r\n\r\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { FxTooltip } from './tooltip';
2
- export { FxTooltip };
2
+ import { defineFxTooltipDirective, destroyFxTooltipDirective } from './directive';
3
+ export { FxTooltip, defineFxTooltipDirective, destroyFxTooltipDirective };
3
4
  declare global {
4
5
  interface HTMLElementTagNameMap {
5
6
  'fx-tooltip': FxTooltip;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,CAAC;AAKrB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,CAAC;AAI1E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
@@ -1,7 +1,10 @@
1
1
  import { defineFxTooltip } from "./tooltip.js";
2
2
  import { FxTooltip } from "./tooltip.js";
3
+ import { defineFxTooltipDirective, destroyFxTooltipDirective } from "./directive.js";
3
4
  defineFxTooltip();
4
5
  export {
5
- FxTooltip
6
+ FxTooltip,
7
+ defineFxTooltipDirective,
8
+ destroyFxTooltipDirective
6
9
  };
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { FxTooltip, defineFxTooltip } from './tooltip';\n\nexport { FxTooltip };\n\n\ndefineFxTooltip();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-tooltip': FxTooltip;\n }\n}\n\r\n\r\n"],"names":[],"mappings":";;AAKA,gBAAA;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { FxTooltip, defineFxTooltip } from './tooltip';\r\nimport { defineFxTooltipDirective, destroyFxTooltipDirective } from './directive';\r\n\r\nexport { FxTooltip, defineFxTooltipDirective, destroyFxTooltipDirective };\r\n\r\ndefineFxTooltip();\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'fx-tooltip': FxTooltip;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAKA,gBAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAClC;AAaD,eAAO,MAAM,YAAY;;;;;;;;CAuDf,CAAC;AAEX,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,WAAW,CAEb;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI7C"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAClC;AAaD,eAAO,MAAM,YAAY;;;;;;;;CA8Ff,CAAC;AAEX,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,WAAW,CAEb;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI7C"}
@@ -14,23 +14,44 @@ const themePresets = {
14
14
  name: "seiya",
15
15
  label: "Seiya",
16
16
  tokens: {
17
- color: { primary: "#e11d48", secondary: "#fb7185", info: "#f43f5e", danger: "#be123c" },
18
- radius: { sm: "6px", md: "10px", lg: "16px" }
17
+ color: {
18
+ primary: "#e11d48",
19
+ secondary: "#fb7185",
20
+ info: "#f43f5e",
21
+ danger: "#be123c"
22
+ },
23
+ radius: { sm: "6px", md: "10px", lg: "16px" },
24
+ effect: {
25
+ "focus-ring": "none"
26
+ }
19
27
  }
20
28
  }),
21
29
  shiryu: register({
22
30
  name: "shiryu",
23
31
  label: "Shiryu",
24
32
  tokens: {
25
- color: { primary: "#0d9488", secondary: "#2dd4bf", success: "#059669", info: "#14b8a6" },
26
- radius: { sm: "4px", md: "8px", lg: "14px" }
33
+ color: {
34
+ primary: "#0d9488",
35
+ secondary: "#2dd4bf",
36
+ success: "#059669",
37
+ info: "#14b8a6"
38
+ },
39
+ radius: { sm: "4px", md: "8px", lg: "14px" },
40
+ effect: {
41
+ "focus-ring": "none"
42
+ }
27
43
  }
28
44
  }),
29
45
  hyoga: register({
30
46
  name: "hyoga",
31
47
  label: "Hyoga",
32
48
  tokens: {
33
- color: { primary: "#0284c7", secondary: "#38bdf8", info: "#06b6d4", danger: "#e11d48" },
49
+ color: {
50
+ primary: "#0284c7",
51
+ secondary: "#38bdf8",
52
+ info: "#06b6d4",
53
+ danger: "#e11d48"
54
+ },
34
55
  surface: { surface: "#f0f9ff", "surface-hover": "#e0f2fe" },
35
56
  radius: { sm: "8px", md: "12px", lg: "18px" }
36
57
  }
@@ -39,7 +60,12 @@ const themePresets = {
39
60
  name: "shun",
40
61
  label: "Shun",
41
62
  tokens: {
42
- color: { primary: "#db2777", secondary: "#f472b6", info: "#ec4899", warning: "#c026d3" },
63
+ color: {
64
+ primary: "#db2777",
65
+ secondary: "#f472b6",
66
+ info: "#ec4899",
67
+ warning: "#c026d3"
68
+ },
43
69
  radius: { sm: "10px", md: "14px", lg: "20px" }
44
70
  }
45
71
  }),
@@ -47,7 +73,12 @@ const themePresets = {
47
73
  name: "ikki",
48
74
  label: "Ikki",
49
75
  tokens: {
50
- color: { primary: "#ea580c", secondary: "#fb923c", danger: "#dc2626", warning: "#f59e0b" },
76
+ color: {
77
+ primary: "#ea580c",
78
+ secondary: "#fb923c",
79
+ danger: "#dc2626",
80
+ warning: "#f59e0b"
81
+ },
51
82
  radius: { sm: "2px", md: "4px", lg: "6px" }
52
83
  }
53
84
  }),
@@ -55,8 +86,16 @@ const themePresets = {
55
86
  name: "aiolia",
56
87
  label: "Aiolia",
57
88
  tokens: {
58
- color: { primary: "#b45309", secondary: "#f59e0b", warning: "#eab308", info: "#84cc16" },
59
- radius: { sm: "6px", md: "12px", lg: "20px" }
89
+ color: {
90
+ primary: "#b45309",
91
+ secondary: "#f59e0b",
92
+ warning: "#eab308",
93
+ info: "#84cc16"
94
+ },
95
+ radius: { sm: "6px", md: "12px", lg: "20px" },
96
+ effect: {
97
+ "focus-ring": "none"
98
+ }
60
99
  }
61
100
  })
62
101
  };