@nyaruka/temba-components 0.167.0 → 0.168.1

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 (59) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/locales/es.js +3 -1
  3. package/dist/locales/es.js.map +1 -1
  4. package/dist/locales/fr.js +3 -1
  5. package/dist/locales/fr.js.map +1 -1
  6. package/dist/locales/pt.js +3 -1
  7. package/dist/locales/pt.js.map +1 -1
  8. package/dist/temba-components.js +2842 -1715
  9. package/dist/temba-components.js.map +1 -1
  10. package/package.json +1 -1
  11. package/src/Icons.ts +2 -0
  12. package/src/display/Button.ts +8 -6
  13. package/src/display/Chat.ts +541 -191
  14. package/src/display/Dropdown.ts +40 -17
  15. package/src/display/Label.ts +25 -4
  16. package/src/display/TembaDate.ts +11 -2
  17. package/src/display/Tip.ts +157 -18
  18. package/src/events/eventRenderers.ts +678 -268
  19. package/src/events.ts +16 -1
  20. package/src/flow/NodeEditor.ts +82 -9
  21. package/src/flow/actions/add_contact_urn.ts +1 -0
  22. package/src/flow/actions/play_audio.ts +1 -0
  23. package/src/flow/actions/send_broadcast.ts +17 -1
  24. package/src/flow/actions/send_msg.ts +12 -1
  25. package/src/flow/actions/set_run_result.ts +1 -0
  26. package/src/flow/actions/start_session.ts +10 -1
  27. package/src/flow/nodes/shared-rules.ts +2 -0
  28. package/src/flow/nodes/split_by_airtime.ts +6 -0
  29. package/src/flow/nodes/split_by_expression.ts +1 -0
  30. package/src/flow/nodes/split_by_llm.ts +2 -0
  31. package/src/flow/nodes/split_by_llm_categorize.ts +3 -1
  32. package/src/flow/nodes/split_by_random.ts +2 -1
  33. package/src/flow/nodes/split_by_resthook.ts +4 -1
  34. package/src/flow/nodes/split_by_webhook.ts +9 -1
  35. package/src/flow/types.ts +3 -0
  36. package/src/flow/utils.ts +49 -0
  37. package/src/form/DatePicker.ts +2 -1
  38. package/src/layout/Card.ts +9 -0
  39. package/src/layout/CardLayout.ts +426 -21
  40. package/src/layout/CardStack.ts +4 -1
  41. package/src/list/ContactList.ts +24 -17
  42. package/src/list/ContentList.ts +640 -33
  43. package/src/list/MsgList.ts +7 -1
  44. package/src/list/SortableList.ts +5 -1
  45. package/src/list/TembaMenu.ts +67 -6
  46. package/src/live/ContactChat.ts +655 -336
  47. package/src/live/ContactDetails.ts +961 -88
  48. package/src/live/ContactFieldEditor.ts +46 -11
  49. package/src/live/ContactFields.ts +57 -16
  50. package/src/live/ContactStoreElement.ts +15 -8
  51. package/src/locales/es.ts +3 -2
  52. package/src/locales/fr.ts +3 -2
  53. package/src/locales/pt.ts +3 -2
  54. package/src/simulator/Simulator.ts +28 -0
  55. package/src/styles/pillVariants.ts +13 -1
  56. package/web-test-runner.config.mjs +2 -0
  57. package/xliff/es.xlf +6 -3
  58. package/xliff/fr.xlf +6 -3
  59. package/xliff/pt.xlf +6 -3
package/CHANGELOG.md CHANGED
@@ -4,8 +4,35 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ #### [v0.168.1](https://github.com/nyaruka/temba-components/compare/v0.168.0...v0.168.1)
8
+
9
+ - Fix bulk action bar hidden under pinned column headers [`#1082`](https://github.com/nyaruka/temba-components/pull/1082)
10
+
11
+ #### [v0.168.0](https://github.com/nyaruka/temba-components/compare/v0.167.0...v0.168.0)
12
+
13
+ > 28 July 2026
14
+
15
+ - Allow resizing the chat in the card layout [`#1080`](https://github.com/nyaruka/temba-components/pull/1080)
16
+ - Add link popup menu items and improve dropdown popups [`#1077`](https://github.com/nyaruka/temba-components/pull/1077)
17
+ - Add inline editing to contact details [`#1075`](https://github.com/nyaruka/temba-components/pull/1075)
18
+ - Draw chat popup arrow with CSS clip-path instead of a glyph [`#1078`](https://github.com/nyaruka/temba-components/pull/1078)
19
+ - Fill full width with timezone box when datepicker wraps [`#1079`](https://github.com/nyaruka/temba-components/pull/1079)
20
+ - Enforce engine limits on flow definition fields in the editor [`#1062`](https://github.com/nyaruka/temba-components/pull/1062)
21
+ - Use default() in webhook router operand so null webhook routes cleanly [`#1069`](https://github.com/nyaruka/temba-components/pull/1069)
22
+ - Restyle contact history search to match list page design language [`#1072`](https://github.com/nyaruka/temba-components/pull/1072)
23
+ - Add resizable columns to content lists [`#1076`](https://github.com/nyaruka/temba-components/pull/1076)
24
+ - Add flow status area with flow-tinted treatment to contact chat [`#1073`](https://github.com/nyaruka/temba-components/pull/1073)
25
+ - Condense chat events into pills with day markers and event tooltips [`#1074`](https://github.com/nyaruka/temba-components/pull/1074)
26
+ - Re-enable contact chat screenshot test for active contacts [`#1067`](https://github.com/nyaruka/temba-components/pull/1067)
27
+ - Speed up and de-flake contact chat tests [`#1066`](https://github.com/nyaruka/temba-components/pull/1066)
28
+ - Fix flaky simulator tests by waiting for chat messages to render [`#1065`](https://github.com/nyaruka/temba-components/pull/1065)
29
+ - Use Opus 4.8 for PR reviews [`e22f7b3`](https://github.com/nyaruka/temba-components/commit/e22f7b3c5bfa52307959d089161093f424a12343)
30
+ - Name the build job Test so the required status check name matches other repos [`76190bd`](https://github.com/nyaruka/temba-components/commit/76190bd42b87d906ebba7aa7b551011270c64cda)
31
+
7
32
  #### [v0.167.0](https://github.com/nyaruka/temba-components/compare/v0.166.0...v0.167.0)
8
33
 
34
+ > 22 July 2026
35
+
9
36
  - Add urn-label attribute to contact list [`#1068`](https://github.com/nyaruka/temba-components/pull/1068)
10
37
 
11
38
  #### [v0.166.0](https://github.com/nyaruka/temba-components/compare/v0.165.0...v0.166.0)
@@ -1,12 +1,14 @@
1
1
  // Do not modify this file by hand!
2
2
  // Re-generate this file by running lit-localize
3
+ import { str } from '@lit/localize';
3
4
  /* eslint-disable no-irregular-whitespace */
4
5
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
6
  export const templates = {
6
7
  'scf1453991c986b25': `Tab para completar, enter para seleccionar`,
7
8
  's73b4d70c02f4b4e0': `No options`,
8
9
  'sbc913d7dc0f33877': `to add`,
9
- 's81f17cfc89a04338': `Interrupt flow`,
10
+ 's7722a91d3a512442': str `Last seen ${0}`,
11
+ 's22965bb9808befb0': `Interrupt`,
10
12
  's122d4de68bcfcdf4': `It's okay to restart`,
11
13
  's3eb2567092b4d7c1': `from the beginning`,
12
14
  's28f37776b3901438': `It's okay to interrupt`,
@@ -1 +1 @@
1
- {"version":3,"file":"es.js","sourceRoot":"","sources":["../../../src/locales/es.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAKhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,4CAA4C;IACvE,mBAAmB,EAAE,YAAY;IACjC,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB,EAAE,gBAAgB;IACrC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;IACrE,mBAAmB,EAAE,QAAQ;CACxB,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n \n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 'scf1453991c986b25': `Tab para completar, enter para seleccionar`,\n's73b4d70c02f4b4e0': `No options`,\n'sbc913d7dc0f33877': `to add`,\n's81f17cfc89a04338': `Interrupt flow`,\n's122d4de68bcfcdf4': `It's okay to restart`,\n's3eb2567092b4d7c1': `from the beginning`,\n's28f37776b3901438': `It's okay to interrupt`,\n's6838d20b10f7512a': `and start this one`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n'sea4f08110bb8f15d': `Remove`,\n };\n "]}
1
+ {"version":3,"file":"es.js","sourceRoot":"","sources":["../../../src/locales/es.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAGhD,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAElC,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,4CAA4C;IACvE,mBAAmB,EAAE,YAAY;IACjC,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB,EAAE,GAAG,CAAA,aAAa,CAAC,EAAE;IACxC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;IACrE,mBAAmB,EAAE,QAAQ;CACxB,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n import {str} from '@lit/localize';\n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 'scf1453991c986b25': `Tab para completar, enter para seleccionar`,\n's73b4d70c02f4b4e0': `No options`,\n'sbc913d7dc0f33877': `to add`,\n's7722a91d3a512442': str`Last seen ${0}`,\n's22965bb9808befb0': `Interrupt`,\n's122d4de68bcfcdf4': `It's okay to restart`,\n's3eb2567092b4d7c1': `from the beginning`,\n's28f37776b3901438': `It's okay to interrupt`,\n's6838d20b10f7512a': `and start this one`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n'sea4f08110bb8f15d': `Remove`,\n };\n "]}
@@ -1,12 +1,14 @@
1
1
  // Do not modify this file by hand!
2
2
  // Re-generate this file by running lit-localize
3
+ import { str } from '@lit/localize';
3
4
  /* eslint-disable no-irregular-whitespace */
4
5
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
6
  export const templates = {
6
7
  's73b4d70c02f4b4e0': `No options`,
7
8
  'scf1453991c986b25': `Tab to complete, enter to select`,
8
9
  'sbc913d7dc0f33877': `to add`,
9
- 's81f17cfc89a04338': `Interrupt flow`,
10
+ 's7722a91d3a512442': str `Last seen ${0}`,
11
+ 's22965bb9808befb0': `Interrupt`,
10
12
  's122d4de68bcfcdf4': `It's okay to restart`,
11
13
  's3eb2567092b4d7c1': `from the beginning`,
12
14
  's28f37776b3901438': `It's okay to interrupt`,
@@ -1 +1 @@
1
- {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../src/locales/fr.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAKhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,YAAY;IACvC,mBAAmB,EAAE,kCAAkC;IACvD,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB,EAAE,gBAAgB;IACrC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;IACrE,mBAAmB,EAAE,QAAQ;CACxB,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n \n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 's73b4d70c02f4b4e0': `No options`,\n'scf1453991c986b25': `Tab to complete, enter to select`,\n'sbc913d7dc0f33877': `to add`,\n's81f17cfc89a04338': `Interrupt flow`,\n's122d4de68bcfcdf4': `It's okay to restart`,\n's3eb2567092b4d7c1': `from the beginning`,\n's28f37776b3901438': `It's okay to interrupt`,\n's6838d20b10f7512a': `and start this one`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n'sea4f08110bb8f15d': `Remove`,\n };\n "]}
1
+ {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../src/locales/fr.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAGhD,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAElC,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,YAAY;IACvC,mBAAmB,EAAE,kCAAkC;IACvD,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB,EAAE,GAAG,CAAA,aAAa,CAAC,EAAE;IACxC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;IACrE,mBAAmB,EAAE,QAAQ;CACxB,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n import {str} from '@lit/localize';\n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 's73b4d70c02f4b4e0': `No options`,\n'scf1453991c986b25': `Tab to complete, enter to select`,\n'sbc913d7dc0f33877': `to add`,\n's7722a91d3a512442': str`Last seen ${0}`,\n's22965bb9808befb0': `Interrupt`,\n's122d4de68bcfcdf4': `It's okay to restart`,\n's3eb2567092b4d7c1': `from the beginning`,\n's28f37776b3901438': `It's okay to interrupt`,\n's6838d20b10f7512a': `and start this one`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n'sea4f08110bb8f15d': `Remove`,\n };\n "]}
@@ -1,12 +1,14 @@
1
1
  // Do not modify this file by hand!
2
2
  // Re-generate this file by running lit-localize
3
+ import { str } from '@lit/localize';
3
4
  /* eslint-disable no-irregular-whitespace */
4
5
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
6
  export const templates = {
6
7
  's73b4d70c02f4b4e0': `No options`,
7
8
  'scf1453991c986b25': `Tab to complete, enter to select`,
8
9
  'sbc913d7dc0f33877': `to add`,
9
- 's81f17cfc89a04338': `Interrupt flow`,
10
+ 's7722a91d3a512442': str `Last seen ${0}`,
11
+ 's22965bb9808befb0': `Interrupt`,
10
12
  's122d4de68bcfcdf4': `It's okay to restart`,
11
13
  's3eb2567092b4d7c1': `from the beginning`,
12
14
  's28f37776b3901438': `It's okay to interrupt`,
@@ -1 +1 @@
1
- {"version":3,"file":"pt.js","sourceRoot":"","sources":["../../../src/locales/pt.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAKhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,YAAY;IACvC,mBAAmB,EAAE,kCAAkC;IACvD,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB,EAAE,gBAAgB;IACrC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;IACrE,mBAAmB,EAAE,QAAQ;CACxB,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n \n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 's73b4d70c02f4b4e0': `No options`,\n'scf1453991c986b25': `Tab to complete, enter to select`,\n'sbc913d7dc0f33877': `to add`,\n's81f17cfc89a04338': `Interrupt flow`,\n's122d4de68bcfcdf4': `It's okay to restart`,\n's3eb2567092b4d7c1': `from the beginning`,\n's28f37776b3901438': `It's okay to interrupt`,\n's6838d20b10f7512a': `and start this one`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n'sea4f08110bb8f15d': `Remove`,\n };\n "]}
1
+ {"version":3,"file":"pt.js","sourceRoot":"","sources":["../../../src/locales/pt.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAGhD,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAElC,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,YAAY;IACvC,mBAAmB,EAAE,kCAAkC;IACvD,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB,EAAE,GAAG,CAAA,aAAa,CAAC,EAAE;IACxC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,sBAAsB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;IACrE,mBAAmB,EAAE,QAAQ;CACxB,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n import {str} from '@lit/localize';\n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 's73b4d70c02f4b4e0': `No options`,\n'scf1453991c986b25': `Tab to complete, enter to select`,\n'sbc913d7dc0f33877': `to add`,\n's7722a91d3a512442': str`Last seen ${0}`,\n's22965bb9808befb0': `Interrupt`,\n's122d4de68bcfcdf4': `It's okay to restart`,\n's3eb2567092b4d7c1': `from the beginning`,\n's28f37776b3901438': `It's okay to interrupt`,\n's6838d20b10f7512a': `and start this one`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n'sea4f08110bb8f15d': `Remove`,\n };\n "]}